创建线程的三种方式优缺点

创建线程的三种方式优缺点Java 使用 Thread 类代表线程 所有的线程对象都必须是 Thread 类或其子类的实例 一 继承 Thread 类创建线程类 1 重写 run 方法 该 run 方法的方法体就代表了线程需要完成的任务 2 创建 Thread 子类的实例 3 调用线程对象的 start 方法来启动该线程

  Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。

一、继承Thread类创建线程类

public class TestCode1 extends Thread { 
     private int i; public void run() { 
     for(;i<100;i++) { 
     System.out.println(getName()+" "+i); } } public static void main(String[] args) { 
     for(int i=0;i<100;i++) { 
     System.out.println(Thread.currentThread().getName()+" "+i); if(i==20){ 
     new TestCode1().start(); new TestCode1().start(); } } } } 

二、实现Runnable接口创建线程类

public class TestCode2 implements Runnable { 
     private int i; public void run() { 
     for(;i<100;i++) { 
     System.out.println(Thread.currentThread().getName()+" "+i); } } public static void main(String[] args) { 
     for(int i=0;i<100;i++) { 
     System.out.println(Thread.currentThread().getName()+" "+i); if(i==20){ 
     TestCode2 test=new TestCode2(); new Thread(test,"新线程1").start(); new Thread(test,"新线程2").start(); } } } } 

三、使用Callable和Future创建线程

public class TestCode3 { 
     public static void main(String[] args) { 
     TestCode3 test = new TestCode3(); FutureTask<Integer> task = new FutureTask<Integer>((Callable<Integer>)()->{ 
     int i=0; for(;i<100;i++){ 
     System.out.println(Thread.currentThread().getName()+"循环变量i的值:"+i); } return i; }); for(int i=0;i<100;i++){ 
     System.out.println(Thread.currentThread().getName()+"循环变量i的值:"+i); if(i==20){ 
     new Thread(task,"有返回值的线程").start(); } try{ 
     System.out.println("子线程的返回值:"+task.get()); } catch (Exception e) { 
     e.printStackTrace(); } } } } 

四、浅谈三种方式优劣势

  • 线程类只是实现了Runnable接口与Callable接口,还可以继承其他类。
  • 在这种方式下,多个线程可以共享一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

劣势

  • 编程稍稍复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法。

  2.采用继承Thread类的方法创建多线程的优缺点。
优势

  • 编写简单,如果需要访问当前线程,则无须使用Thread.currentThread()方法,直接使用this即可获得当前线程。

劣势

  • 因为线程类已经继承了Thread类,所以不能再继承其他父类。

五、总结

  鉴于上面分析,因此一般推荐采用实现Runnable接口、Callable接口的方式来创建多线程。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175861.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午11:15
下一篇 2026年3月26日 下午11:15


相关推荐

  • idea激活码永久有效_最新在线免费激活[通俗易懂]

    (idea激活码永久有效)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html08G05E7DZH-eyJsaWNlbnNlSW…

    2022年3月28日
    59
  • SpringBoot安全线程锁工具类[通俗易懂]

    SpringBoot安全线程锁工具类[通俗易懂]这几日对接物联网项目,前端请求数据,后端接口发起TCP请求,由另一个线程来接收数据,这时候需要阻塞前端发起的请求,直到TCP接收数据完毕,再返回数据给前端。特此写了一个工具类importjava.util.concurrent.ConcurrentHashMap;importjava.util.concurrent.locks.LockSupport;publicclassLockSupportUtil{//存放线程引用的全局容器publicstaticfina

    2022年6月16日
    48
  • PyPDF2详解

    PyPDF2详解工作中可能会涉及处理pdf文件,PyPDF2就是这样一个库,使用它可以轻松的处理pdf文件,它提供了读、写、分割、合并、文件转换等多种操作。官方地址:http://mstamy2.github.io/PyPDF2/安装1.RPM式系统(Redhat、CentOS)1pipinstallpypdf22.DEB式系统(Deb…

    2022年6月23日
    34
  • 2025年主流大模型全景对比:Grok、Claude、ChatGPT与Gemini的战场 – 教程

    2025年主流大模型全景对比:Grok、Claude、ChatGPT与Gemini的战场 – 教程

    2026年3月15日
    3
  • python 如何使用swagger

    swagger介绍swagger是一个api文档工具,集api管理,测试,访问于一体的网页版api文档工具了解更多,请访问相关网站swagger官网swaggergithubOpenApi参数说明python相关包connexionflasggerflask-swag,flask-swaggerFlask-RESTPluspythonswagger-cod…

    2022年4月12日
    700
  • onshow和onload的区别

    onshow和onload的区别onshow在每次打开页面都会加载数据,可用于数据在需要刷新的情况下。onload只是在第一次进入页面时会刷新数据,从二级页面回来不会重新加载数据。

    2022年6月21日
    107

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号