thread|Java多线程和线程池的执行流程
Java多线程的实现方式主要有四种:继承Thread类 , 实现Runnable接口 , 实现Callable接口通过FutureTask包装器创建Thread线程 , 使用ExecutorService、Callable、Future实现多线程并返回结果 。
其中 , 前两个方法在线程执行后没有返回值 , 后两个有返回值 。
1、继承Thread类并重写run方法
(其实Thread类本身也实现了Runnable接口)
public class MyThread extends Thread {
public void run() {
System.out.println(\"MyThread.run()\");
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
?
2、实现Runnable接口并重写run方法
public class CreatesDemo2 {
public static void main(String[
args) {
Runnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
class MyRunnable implements Runnable {
public void run() {
【thread|Java多线程和线程池的执行流程】System.out.println(\"通过Runnable创建的线程!\");
以上两种创建方法在工作上具有相同的性质 。但是推荐使用Runable接口方法 。解决单继承的局限性 。 以下两种方式是jdk1.5新增的!
?
3、实现Callable接口并重写 调用方法(带返回值)
如何启动线程?
(1) 创建Callable接口的实现类对象
(2) 创建FutureTask对象 , 并传入Callable类型参数
[Future callable
{Callable<V>
(3) 调用Thread类重载参数为Runnable的构造函数创建Thread对象
传递FutureTask作为参数 >
如何获取返回值?
调用FutureTask类的get()方法
注:
与Runnable 相比 , Callable 具有更强大的功能 。
实现的 call() 方法可以返回一个值 。
该方法可以抛出异常 。
支持通用返回值
需要 FutureTask 类 。例如返回结果
Future接口可以取消特定Runnable和Callable任务的执行结果 , 检查查询是否完成 , 并获取结果 。
FutureTask 是 Futrue 接口的唯一实现类 。
FutureTask 同时实现了 Runnable 和 Future 接口 。可以作为Runnable被线程执行 , 也可以作为Future来获取Callable的返回值
?
4.使用线程池(带返回值)
说明:
提前创建多个线程 , 放入线程池中 , 使用时直接获取 , 使用后放回线程池中 。可以避免频繁的创建和销毁 , 实现复用 。类似于生活中的公共交通 。
好处:
提高响应速度(减少创建新线程的时间)
减少资源消耗(重用线程池中的线程 , 不需要每次都创建)
方便线程 管理
?
如图:线程池的执行流程
?
- 苹果|库克压力确实大,在众多国产厂家对标下,iPhone13迎来“真香价”!
- 苹果|苹果最巅峰产品就是8,之后的产品,多少都有出现问题
- 小米科技|RTX3060的性能到底如何?相比RTX2060提升有多大?
- 拼多多|砍价永远差一刀?拼多多回应:小数点后有6位
- 多家银行宣布打造AI数字员工?虚拟人风口下银行也不要真人了?
- 联想|柳传志的联想多次投资他女婿张锐的公司,网友:一家人好办事
- 接班人|任正非儿子任平,会是华为接班人吗?他比父亲还低调许多
- 我们的生活|社交正在推动“孤独生意”多元化发展,天聊将重塑用户精神世界!
- 光刻机|美媒:ASML多个举动暗示今明两年将向中芯出货EUV光刻机
- 阿里巴巴|社区团购是互联网巨头的宝地,美团拼多多发展强劲,阿里坐不住了