Java 创建线程的三种方式总结


我们在开发中,为了提高程序的运行效率,经常会使用多线程的方式来实现并发操作。

那么创建线程有几种方式呢?

1、继承 Thread 类

直接继承 Thread 即可实现多线程。Thread 本质上也是实现了 Runnable 接口,线程启动的唯一方法是通过 Thread 类的 start() 实例方法实现的。start() 方法调用时,系统才会真正创建一个新线程,并执行 run() 方法,它是一个native方法。

    class MyThread extends Thread {@Overridepublic void run() {super.run();}}private void testThread(){Thread thread = new MyThread();thread.start();}

这种方式的缺点就是,Java 的单继承限制,想通过 Thread 实现多线程,就只能继承 Thread 类,不可继承其他类。

2、实现 Runnable 接口

如果自己的类已经继承了其他类,这时就只能通过实现 Runnable 接口来实现多线程了。

不过,继承 Runnable 接口后,想要启动线程,需要把该类的对象作为参数,传递给 Thread 的构造函数,并使用 Thread 类的实例方法 start 来启动。

public class TestThread extends A implements Runnable {public void run() {……    }
}//启动线程
TestThread testThread = new TestThread();
Thread thread = new Thread(testThread);
thread.start();

Thread 内部的 run 方法我们可以看到它的实现原理:

private Runnable target;public void run() {if (target != null) {target.run();}
}

target 是我们传递进来的 Runnable 对象,当线程执行时,线程的 run 方法会直接调用 Runnable 对象的 run 方法。

3. 实现 Callable 接口

如果想要执行的线程有返回,怎么处理呢?这时应该使用 Callable 接口了,与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。

public class MyCallable implements Callable<Integer> {public Integer call() {return 111;}
}public static void main(String[] args) throws ExecutionException, InterruptedException {MyCallable mc = new MyCallable();FutureTask<Integer> ft = new FutureTask<>(mc);Thread thread = new Thread(ft);thread.start();System.out.println(ft.get());
}

比较

这几种线程创建方式中,实现接口会更好一些,因为:

  • Java 不支持多重继承,因此继承了 Thread 类就无法继承其它类,但是可以实现多个接口。

  • 类可能只要求可执行就行,继承整个 Thread 类开销过大。

  • 另外,如果需要有返回值时,使用 Callable 接口是适合的。

总结


本节我们回顾了,Java中创建线程的几种方式。

  • 继承 Thread 类
  • 实现 Runnable 接口
  • 实现 Callable 接口

PS:更多精彩内容,请查看 --> 《Java 技术点合集》
PS:更多精彩内容,请查看 --> 《Java 技术点合集》
PS:更多精彩内容,请查看 --> 《Java 技术点合集》

Java 创建线程的三种方式总结相关推荐

  1. java 创建线程_【80期】说出Java创建线程的三种方式及对比

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...

  2. Java创建线程的三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

  3. Java 创建线程的三种方式

    一.继承Thread类创建 1.定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体: 2.创建该类的实例对 ...

  4. Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式

    一共有以下三种方式: 1.继承Thread 2.实现Runnable 3.实现Callable,并FutureTask包装 线程启动方式均是使用start()方法 先阐述优缺点: 1和2,3: 2,3 ...

  5. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

  6. 创建线程的三种方式、线程运行原理、常见方法、线程状态

    文章目录 1.创建线程的三种方式 1.1 继承Thread类并重写run方法 1.2 使用Runnable配合Thread 1.3 通过Callable和FutureTask创建线程 2.Runnab ...

  7. 创建线程的三种方式及区别

    一:创建线程的三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable接口 二:创建线程的具体实现步骤: 1.继承Thread类 (1).先继承 Thread类,并且 ...

  8. Java 创建线程的三种方法比较

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...

  9. Java创建线程的三种方法

    这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...

  10. java创建线程的两种方式及区别

    本文将介绍创建线程的两种方式,示例代码在下面,复制粘贴即可 继承Thread类方式和实现Runnable接口方式 区别:由于在开发的过程中,很多的类都会用到继承的方式,如果采用继承的方式会让各个类之间 ...

最新文章

  1. PowerToys,微软开源的超实用小工具合集
  2. Flex 学习笔记 动态设置itemRenderer
  3. div 居中,浏览器兼容性
  4. [SPP-NET]Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
  5. TypeError之: unsupported operand type(s) for +: 'dict_values' and 'dict_values
  6. Php输出Xml报错:XML declaration allowed only at the start of the document
  7. rip c语言,GNU C 对标准C语言的扩展
  8. 在.Net中实现RichClient+Restful+JPA架构-探索实现
  9. c语言里,关于宏定义的使用
  10. win10下itunes安装失败的解决方法
  11. mybatis批量更新报错问题解决
  12. 易语言清空c盘指令,C盘清理命令
  13. 解决-win10软件默认安装路径为C盘——修改注册表
  14. 计算机专业术语(个人学习总结,不定期更新)
  15. [Learn Android Studio 汉化教程]Reminders实验:第一部分(续)
  16. 3月最新HP库存备件信息-广州励康
  17. Python基础语法学习6
  18. SpringBoot项目中自动加载datasourceConfig配置导致启动失败
  19. 零基础学习Vue3(保姆级教学)
  20. 计算机图画大赛作品六年级,小学六年级优秀绘画作品图片精选

热门文章

  1. python抛出异常 后如何接住_如何在try中捕获异常后继续循环。。。例外
  2. 在线解方程的计算机,解方程计算器在线使用 方程计算器如何在线使用
  3. vue怎么安装element-ui教程
  4. 软件项目管理第一章作业答案
  5. 皮尔逊相关系数(Pearson Correlation Coefficient)
  6. 专利学习——常用必备知识
  7. java初级工程师职责_Java初级开发工程师工作的岗位职责
  8. 单点登录原理与代码实现
  9. 整理NLPIR基本功能函数
  10. Java学习博客第一篇