Java 创建线程的三种方式总结
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 创建线程的三种方式总结相关推荐
- java 创建线程_【80期】说出Java创建线程的三种方式及对比
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...
- Java创建线程的三种方式
一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...
- Java 创建线程的三种方式
一.继承Thread类创建 1.定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体: 2.创建该类的实例对 ...
- Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式
一共有以下三种方式: 1.继承Thread 2.实现Runnable 3.实现Callable,并FutureTask包装 线程启动方式均是使用start()方法 先阐述优缺点: 1和2,3: 2,3 ...
- java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)
1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...
- 创建线程的三种方式、线程运行原理、常见方法、线程状态
文章目录 1.创建线程的三种方式 1.1 继承Thread类并重写run方法 1.2 使用Runnable配合Thread 1.3 通过Callable和FutureTask创建线程 2.Runnab ...
- 创建线程的三种方式及区别
一:创建线程的三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable接口 二:创建线程的具体实现步骤: 1.继承Thread类 (1).先继承 Thread类,并且 ...
- Java 创建线程的三种方法比较
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...
- Java创建线程的三种方法
这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...
- java创建线程的两种方式及区别
本文将介绍创建线程的两种方式,示例代码在下面,复制粘贴即可 继承Thread类方式和实现Runnable接口方式 区别:由于在开发的过程中,很多的类都会用到继承的方式,如果采用继承的方式会让各个类之间 ...
最新文章
- PowerToys,微软开源的超实用小工具合集
- Flex 学习笔记 动态设置itemRenderer
- div 居中,浏览器兼容性
- [SPP-NET]Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
- TypeError之: unsupported operand type(s) for +: 'dict_values' and 'dict_values
- Php输出Xml报错:XML declaration allowed only at the start of the document
- rip c语言,GNU C 对标准C语言的扩展
- 在.Net中实现RichClient+Restful+JPA架构-探索实现
- c语言里,关于宏定义的使用
- win10下itunes安装失败的解决方法
- mybatis批量更新报错问题解决
- 易语言清空c盘指令,C盘清理命令
- 解决-win10软件默认安装路径为C盘——修改注册表
- 计算机专业术语(个人学习总结,不定期更新)
- [Learn Android Studio 汉化教程]Reminders实验:第一部分(续)
- 3月最新HP库存备件信息-广州励康
- Python基础语法学习6
- SpringBoot项目中自动加载datasourceConfig配置导致启动失败
- 零基础学习Vue3(保姆级教学)
- 计算机图画大赛作品六年级,小学六年级优秀绘画作品图片精选