创建线程有哪几种方式

news/2024/11/13 19:43:05/文章来源:https://www.cnblogs.com/2324hh/p/18539819

1. 继承 ​​Thread​​ 类

优点

  • 简单直观,适合初学者。
  • 直接继承 ​​Thread​​ 类,可以方便地访问和使用 ​​Thread​​ 类的方法。

缺点

  • Java 不支持多继承,因此如果你的类已经继承了其他类,则不能继承 ​​Thread​​ 类。
  • 仅适用于简单的线程任务。

示例

class MyThread extends Thread {@Overridepublic void run() {System.out.println("Thread is running");}public static void main(String[] args) {MyThread thread = new MyThread();thread.start();}
}

2. 实现 ​​Runnable​​ 接口

优点

  • 解决了单继承的问题,可以同时实现多个接口。
  • 更灵活,可以将 ​​Runnable​​ 对象传递给多个线程。

缺点

  • 需要通过 ​​Thread​​ 类的构造器来创建线程对象。

示例

class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Runnable is running");}public static void main(String[] args) {Thread thread = new Thread(new MyRunnable());thread.start();}
}

3. 实现 ​​Callable​​ 接口和 ​​FutureTask​

优点

  • ​Callable​​ 接口的 ​​call()​​ 方法可以返回值和抛出异常,更加灵活。
  • 通过 ​​FutureTask​​ 可以获取任务的执行结果。

缺点

  • 相对复杂,适合需要返回结果的任务。

示例

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;class MyCallable implements Callable<Integer> {@Overridepublic Integer call() throws Exception {return 42;}public static void main(String[] args) throws Exception {FutureTask<Integer> futureTask = new FutureTask<>(new MyCallable());Thread thread = new Thread(futureTask);thread.start();System.out.println("Result: " + futureTask.get());}
}

4. 使用 ​​Executor​​ 框架

优点

  • 提供了更高级的线程管理和调度功能。
  • 适合大规模并发任务的管理。
  • 代码更简洁,可维护性更高。

缺点

  • 学习曲线较陡峭,需要了解 ​​Executor​​ 框架的各个组件。

示例

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Runnable is running in Executor");}public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(5);for (int i = 0; i < 10; i++) {executor.submit(new MyRunnable());}executor.shutdown();}
}

 

总结

  • 继承 Thread​ 类:简单直观,适合初学者。
  • 实现 Runnable​ 接口:灵活,解决单继承问题。
  • 实现 Callable​ 接口和 ​FutureTask​​:适合需要返回结果的任务。
  • 使用 Executor​ 框架:适合大规模并发任务的管理,提供高级功能。

推荐使用 ​​Executor​​ 框架,因为它提供了更强大的功能和更好的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[豪の学习笔记] CI/CD相关 - Docker

Docker常见命令,命名别名,数据卷挂载,本地目录挂载,自定义镜像,容器网络互联一、docker常见命令单独下载镜像文件 docker pull 查看本地镜像文件 docker images 删除本地镜像文件 docker rmi 基于dockerfile构建自定义镜像 docker build 将打包好的镜像保存在本地 docker …

excel中查找亏损第一大第二大第三大的商品的亏损金额;涨出第一大,第二大,第三大的金额;以及查找对应数值的商品的名称,

k2 里的公式 =LARGE(IF(B:B="品类1",E:E),1) lL 里的公式 =LARGE(IF(B:B="品类1",E:E),2) M2里额公式 =LARGE(IF(B:B="品类1",E:E),3) N2里的公式=MIN(IF(B:B="品类1",E:E),1) O2里的公式=SMALL(IF(B:B="品类1",E:E),2) P2里…

线程池都有哪些状态

线程池有五种典型状态: 1.RUNNING(运行状态):在这个状态下,线程池可以接收新的任务提交,并且能够处理已添加到任务队列中的任务。这是线程池的初始状态,也是最活跃的状态。这是最正常的状态 2.SHUTDOWN(关闭状态)当调用了线程池的`shutdown()`方法后,线程池进入此状…

GIT RE-BASIN: MERGING MODELS MODULO PERMUTATION SYMMETRIES (1)

在深度学习模型的训练过程中,经常会遇到这样的现象:每次训练,虽然初始值、随机种子、训练数据的顺序不一样,但是得到的loss曲线都差不多,在验证集上的结果也差不多.这篇论文从land scape的角度解释了这个问题:神经网络的loss landscape并不是我们想象中的很混乱、毫无规律,而…

GIT RE-BASIN: MERGING MODELS MODULO PERMUTATION SYMMETRIES

在深度学习模型的训练过程中,经常会遇到这样的现象:每次训练,虽然初始值、随机种子、训练数据的顺序不一样,但是得到的loss曲线都差不多,在验证集上的结果也差不多.这篇论文从land scape的角度解释了这个问题:神经网络的loss landscape并不是我们想象中的很混乱、毫无规律,而…

hashCode()与equals()之间的关系

在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。 1.hashCode()和equals()是Object类中定义的两个重要方法,用于对象的比较和哈希处理。 2.hashCode()方法:h…

文生视频大模型

简介Sora 官网地址:https://openai.com/sora文生视频指的是将文本描述转化为视频内容的技术,2024年2月15日 OpenAI 正式对外发布 Sora 人工智能模型,在人工智能领域掀起了一场风波,这是计算机视觉领域的一个突破。 Sora 这一名称起源于日文中“空”的含义,暗示了其具备的无…

泛型中extends和super的区别

泛型中的 ​​extends​​​ 和 ​​super​​ 关键字用于设置类型参数的上下界,控制可以传递给泛型类型的参数类型。它们的区别在于限制的方向和用途: 1.extends:上界限制: 使用 ​​extends​​ 关键字定义了一个类型参数的上界,意味着传入的类型必须是指定类型或其子类型…

arthas进行服务器资源监控

https://arthas.aliyun.com/doc/ 官方指导文档 1、arthas下载 wget https://arthas.aliyun.com/arthas-boot.jar2、是jar包,可直接用java启动 java -jar arthas-boot.jar 3、查看所有进程信息 4、查看某个进程信息 thread PID

变更管理的艺术:CMDB变更管理应用全解析

在信息技术快速发展和企业数字化转型的背景下,变更管理成为了确保业务连续性和系统稳定性的关键环节。CMDB作为变更管理的核心工具,能够提供全面的资产和配置视图,还支持变更管理流程的各个方面,从而提高变更的成功率。 一、什么是变更管理 变更管理是指对IT环境中的配置项…

地球空间网格编码规则

中国国家标准提出《地球空间网格编码规则》(GB/T 40087-2021)是2021年4月30日实施的一项中华人民共和国国家标准 外文名称:Geospatial grid encoding rule 规定了地球空间网格剖分要求和编码方法。该标准适用于作为空间单元与空间信息组织的地球空间网格剖分和代码标识。 编…