文章目录
源码分析
任务
两个独立的任务接口
两个接口Runnable和Callable<V>
Runnable接口
用于封装执行任务的代码块
定义run方法,没有返回值
Callable<T>接口
用于封装执行任务的代码块
定义call方法,返回值类型为V
与线程池相关的任务接口/类
Future<V>接口
定义多个方法
定义取消相关方法
boolean cancel(boolean mayInterruptIfRunning)
boolean isCancelled()
boolean isDone()
定义获取任务结果的相关方法
V get() throws InterruptedException, ExecutionException
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
RunnableFuture<V>接口
继承Runnable接口和Future<V>接口
FutureTask<V>类
持有一个int变量state和多个相关常量,用于记录任务执行状态
持有一个Callable<V>对象callable和一个Object对象outcome
实现接口RunnableFuture<V>,实现run方法、两个get方法、取消相关方法
实现run方法,在其中调用对象callable的run方法,获取的结果赋值给对象outcome
实现两个get方法,根据任务执行状态,采取不同的操作
1.情况一:任务已完成,挂起线程,返回结果
2.情况二:任务未完成,不做操作
实现取消相关方法实现取消相关方法
1.实现isCanceled方法和isDone方法,根据任务执行状态,返回true或false
2.实现cancel方法,阻塞线程或中断线程
线程
Thread类
持有一个Object对象lock,作为锁
持有一个Runnable对象target
实现接口Runnable,实现run方法,在其中调用持有的Runnable对象target的run方法
线程池
中断相关操作
public void interrupt()
尝试中断线程,根据线程的情况,做不同的操作
第一种情况,中断正在执行的线程, 线程的中断状态变成 true,线程正常运行,并不会停止下来
第二种情况,中断处于 sleep、wait、join状态的线程,线程会抛出异常并中止运行,并且会将中断状态重置为 false

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



