Java多线程专题之Callable、Future与FutureTask(含源码分析)
前言
大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫。目前正在出一个Java多线程专题长期系列教程,从入门到进阶, 篇幅会较多, 喜欢的话,给个关注❤️ ~
适合人群
-
有一定的Java基础 -
想学习或了解多线程开发 -
想提高自己的同学
「大佬可以绕过 ~」
背景
之前给大家讲了一些框架的使用,这些都属于业务层面的东西,你需要熟练掌握它并在项目中会运用它即可,但这些对自身技术的积累是远远不够的,如果你想要提高自己,对于语言本身你需要花更多的时间去挖掘而不是局限于框架的使用,所以之前为什么跟大家一直强调基础的重要性,框架可以千变万化,层出不穷,但是基础它是不变的,不管是学java还是前端或者是其它语言, 这一点大家还是需要认清的。
接下来的几期会专门讲多线程这一块,篇幅会较多,耐心看完你一定会有收获
情景回顾
上期带大家学习了什么是进阶学习了Thread以及分析了它的一些源码,本期带大家学习Callable、Future与FutureTask的用法以及源码分析, 内容较多, 我们一起来看一下吧~
Callable & Future
之前我们通过Runnable,Thread就可以创建一个线程,但是它也有一个局限,就是没有返回值,有时候我们的需求需要结合多任务处理后的数据做一些事情,所以通过上边的方法就不好解决了。
下面我们看一下Callable
private volatile int state;
private static final int NEW = 0;
private static final int COMPLETING = 1;
private static final int NORMAL = 2;
private static final int EXCEPTIONAL = 3;
private static final int CANCELLED = 4;
private static final int INTERRUPTING = 5;
private static final int INTERRUPTED = 6;
state可能的状态转变路径如下:
-
NEW -> COMPLETING -> NORMAL -
NEW -> COMPLETING -> EXCEPTIONAL -
NEW -> CANCELLED -
NEW -> INTERRUPTING -> INTERRUPTED
结束语
本期到这里就结束了, 总结一下,本节主要讲了Callable、Future与FutureTask的常用方法,以及从问题触发,带大家分析了一下FutureTask的源码,这里大家要好好理解,不要去背,想要告诉大家的是学习要带着问题, 看源码一定要大胆猜测,冷静分析 ~
下期预告
之前提到过线程组的概念,下期就带大家学习线程组和线程的优先级。关注公众号加群,一起学习进步。关注我,不迷路, 下期不见不散 ~
更文时间
-
工作日(周一 ? 周五) -
周末不更 ☀️ -
节假日不定时更
往期内容
-
-
-
-
我的博客(阅读体验较佳)
-
-
-
-
-
项目源码(源码已更新 欢迎star⭐️)
-
java-thread-all
-
地址: https://github.com/qiuChengleiy/java-thread-all.git
推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)
-
springboot-all
-
地址: https://github.com/qiuChengleiy/springboot-all.git -
-
本篇文章来源于微信公众号: 程序员皮卡秋
微信扫描下方的二维码阅读本文

Comments NOTHING