实现自定义线程池(ExecutorService/Callable)
2021-03-02 21:40:59 0 举报
AI智能生成
自定义线程池(ExecutorService/Callable)
作者其他创作
大纲/内容
阅读导航
<b style=""><font color="#0076b3">线程 👉</font></b>
<b><font color="#0076b3">CPU+JMM</font></b> 👉
<b><font color="#0076b3">CAS+Volatile</font></b> 👉
<b><font color="#0076b3">Synchronized</font></b> 👉
<b><font color="#0076b3">JUC</font></b>
<b style=""><font color="#0076b3">locks锁+atomic原子类 👉</font></b>
<b><font color="#f15a23">executor自定义线程池</font></b>
<b><font color="#0076b3">collections并发容器</font></b> 👉
<b><font color="#0076b3">tools并发工具类</font></b> 👉
<b><font color="#0076b3">线程池</font></b> 👉
<b style="font-size: inherit;"><font color="#0076b3">ThreadLocal</font></b><span style="font-size: inherit;"> 👉</span><br>
executor
Future
RunnableFuture
FutureTask
启动和取消运算
查询运算是否完成
取回运算结果
SwingWorker
CompletableFuture
supplyAsync():用来开启一个异步任务(有返回值)
thenCompose():当第一个任务完成时才会执行第二个任务,开启新线程,最终结果由第二个任务返回
thenCombine():两个异步任务全部完成时才会执行某些操作,用来合并两个任务,结果由BiFunction()函数返回
ScheduledFuture
Callable
Callable接口类似于Runnable,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后可以返回值,这个<br>返回值可以被Future拿到,也就是说Future可以拿到异步执行任务的返回值
实现Callable接口
重写call方法,有返回值,可抛异常
需要用FutureTask在外部封装一下再传递给<br>Thread,FutureTask就是Runnable的实现类
FutureTask使用场景?
两件事或多件事同时完成
FutureTask两个个构造函数?
第一个构造函数要求传入Callable对象
第二个构造函数要求传入Runnable对象和返回值类型
FutureTask的其他方法?
get()
会一直等待子线程运行结束
get(5,TimeUnit.SECOND)
传入等待时间,超时后会抛出TimeoutException异常,需要捕捉处理
isDone()
询问子线程是否执行完成,返回值是boolean
优点
在主线程中可获取到子线程的返回值
直接调用FutureTask对象的get()方法
为什么可以获取到?如何获取的?
在主线程中可获取到子线程发生的异常
通过getCause()方法获取子线程的异常
代码实现
Executor<br>
ExecutorService<br>
AbstractExecutorService<br>
ThreadPoolExecutor
ScheduledExecutorService
ScheduledThreadPoolExecutor
RejectedExecutionHandler<br> 拒绝策略
ThreadPoolExecutor.AbortPolicy
ThreadPoolExecutor.CallerRunsPolicy
ThreadPoolExecutor.DiscardOldestPolicy
ThreadPoolExecutor.DiscardPolicy
execute() 和 submit() 的区别?
execute()是Executor接口中的方法,submit()是ExecutorService中的方法
submit()方法中调用了execute()方法,增加了FutureTask返回值
关于作者
<b style=""><font color="#b296c7">我的博客</font></b> 👉
<b><font color="#00a650">微信公众号</font></b> 👉
<b><font color="#f15a23">GitHub 导航</font></b> 👉
<b><font color="#662c90">ProcessOn 主页 👉</font></b>
0 条评论
下一页