深入浅出Java多线程-第二章 Java多线程入门类和接口-学习

参考来源:书籍 深入浅出Java多线程 
http://concurrent.redspider.group/RedSpider.html
https://redspider.gitbook.io/concurrent/

一、Thread类和Runnable接口

Thread类是Runnable接口的一个实现类,封装了一些常用方法。

start()和run()方法的区别
调用start()方法,虚拟机会创建一个线程,然后等到这个线程第一次得到时间片时再调用run()方法。是异步执行。
直接调用run()方法和调用普通方法没区别,是同步执行。

二、Callable、Future与FutureTask
Callable接口和Runnable类似,但支持泛型返回值。配合使用Future接口可获取返回值。
Future接口和Callable接口配合使用获取线程的返回值。
FutureTask是Future接口的具体实现,且实现Runnable接口。实现了cancel,get,isDone等方法,方便使用。

实现多线程的方式:
继承Thread类,并重写run方法;
实现Runnable接口的run方法;
实现Callable接口的call方法,配合线程池工具ExecutorService来使用;有返回值,可取消(不一定能取消成功)

如何使用:
如果不需要使用Thread类中的一些方法,我们通常优先使用“实现Runnable接口”这种方式来自定义线程类。
如果需要返回值或需要取消功能使用Callable接口。

FutureTask的构造方法会将提交的Runnable或Callable任务都会被包装成FutureTask。
FutureTask最终将Runnabl转化为Callable,这里使用了适配器模式实现,由Executors源码可知。

FutureTask源码分析  https://my.oschina.net/7001/blog/875658

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值