当前位置: 首页 > news >正文

java中多线程的实现方式

Java中多线程的实现方式

1. 继承 Thread 类重写 run 方法
public class MyThread extends Thread {@Overridepublic void run() {System.out.println("继承Thread类");}public static void main(String[] args) {MyThread t = new MyThread();t.start();}
}
2. 实现 Runable 接口的 run 方法
public class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("实现Runnable接口");}public static void main(String[] args) {MyRunnable r = new MyRunnable();new Thread(r).start();}}
3. 通过 FutureTask 和 Callable,实现 Callable 接口的 call 方法,
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;public class MyCallable implements Callable<String> {@Overridepublic String call() {return "实现Callable接口的call方法!";}public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<String> task = new FutureTask<>(new MyCallable());new Thread(task).start();System.out.println(task.get());}}
4. 通过线程池方式
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class MyExecutorService {public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(2);executor.submit(() -> {System.out.println("通过线程池创建!");});// 关闭线程池executor.shutdown();}}

在oracle的官方文档中,其官方文档链接如下:https://docs.oracle.com/javase/8/docs/api/index.html

在jdk8中,很明确的表明了创建线程的方式只有两种,重点就是这句 There are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread . The other way to create a thread is to declare a class that implements the Runnable interface.

翻译过来的意思就是说:有两种方法可以创建一个新的执行线程。一种方法是将一个类声明为Thread的子类。另一种方法是声明一个实现Runnable 接口的类。

这是权威的官方文档说的,创建线程的方式只有两种。

http://www.xdnf.cn/news/606799.html

相关文章:

  • 【算法篇】二分查找算法:基础篇
  • AES加密模式详解及OpenSSL C库函数指南
  • 【SSL部署与优化​】​​OCSP Stapling配置指南:减少证书验证延迟​​
  • 相机坐标系、图像坐标系和世界坐标系
  • redis 基本命令-17 (KEYS、EXISTS、TYPE、TTL)
  • 新手SEO高效入门实战精要
  • 40 岁 Windows 开启 AI 转型:从系统到生态的智能重构
  • 「MATLAB」计算校验和 Checksum
  • C++:动态刷新打印内容
  • 使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第二部分)
  • 【Elasticsearch】给所索引创建多个别名
  • 【Bluedroid】蓝牙HID Host disconnect流程源码解析
  • UE4游戏查找本地角色数据的方法-SDK
  • 从零开始的抽奖系统创作(4)
  • FPGA 42 ,时序约束深度解析与实战应用指南( FPGA 时序约束 )
  • 分享|16个含源码和数据集的计算机视觉实战项目
  • VMware虚拟机突然无法ssh连接
  • Spring Boot WebFlux流式返回全攻略:从基础到企业级实践
  • PHP7内核剖析 学习笔记 第八章 命名空间
  • Python打卡DAY34
  • 亚马逊搜索代理: 终极指南
  • 线性回归中涉及的数学基础
  • 嵌入式学习笔记 - freeRTOS链表中pxIndex->pxPrevious 与pxIndex->pxPrevious->的区别
  • DB-GPT扩展自定义Agent配置说明
  • 微信小程序调用蓝牙API “wx.writeBLECharacteristicValue()“ 报 errCode: 10008 的解决方案
  • GMP模型入门
  • Lyra学习笔记1地图角色加载流程
  • 树莓派WiringPi库
  • 大模型「瘦身」指南:从LLaMA到MobileBERT的轻量化部署实战
  • php 根据另一个数组中 create_time 的时间顺序,对原始数组进行排序。