JUC·Executor 框架
前言
多线程和并发这两个东西真的是向往已久,总是有一种神秘的感觉,想去探索一波,又担心水平不够无法驾驭。想以读书笔记的方式来写,但是又觉得缺少自己的一些思考;但是在没有足够并发编程经验的情况下又没法去写出很深刻的东西,毕竟没有踩过坑。所以在阅读spring源码的同时,也想抽点时间来看一看JUC的东西,关于这块只能说是记录自己学习JUC的一个过程,尝试用一些具体的代码demo来加深理解。所以就把本系列写成《【 初识】-JUC·XXXX》,用来让自己打开并发编程的大门。
JUC
JUC即java.util.concurrent;也就是java提供的并发包。JUC中从包结构上来看主要是:
java.util.concurrent
在这个包下面主要是线程池、并发集合以及一些并发工具类。线程池相关是围绕Excetor框架来构建;这也是本文下面部分的重点。
java.util.concurrent.atomic
这个包下面是一些原子操作类,算是并发辅助工具类,基本实现依赖于CAS;
java.util.concurrent.locks
这个从名字就可以知道它的作用,就是提供锁。
JUC各个模块的类
- 整体框架
- atomic
- locks
- 并发集合
- 并发工具
- forkJoin fork-join在JUC中有下面三个类:
1
public class ForkJoinPool extends AbstractExecutorService
1
public abstract class ForkJoinTask<V> implements Future<V>, Serializable
1
public class ForkJoinWorkerThread extends Thread
Future
Future提供了可以获取异步执行结果的方法,区别于Runnable的run方法,run是不提供返回结果的。
1 | public interface Future<V> { |
Callable
声明了一个名称为call()的方法,同时这个方法可以有返回值V,也可以抛出异常
1 | public interface Callable<V> { |
关于Callable和Future的使用一般情况下都是结合我们的线程池来使用的。
Executor
Executor接口是线程池实现的顶级接口,其和spring中的BeanFactory所承担的角色差不多,就是提供顶级的功能约束,具体实现交于不同子类来完成。
1 | public interface Executor { |
下面是JUC中Executor框架的整体结构:
ExecutorService
1 | public interface ExecutorService extends Executor { |
ExecutorService 再Executor接口的基础上扩展了对线程池状态的控制以及提交任务执行的超时控制。线程池的基本功能还不够完善,不能真正的具备处理具体业务的能力(毕竟是个接口,O(∩_∩)O哈哈~)。