稀土 2018-04-24
JUC是Java5.0开始提供的一组专门实现多线程并发处理的开发框架,利用JUC开发架构可以有效的解决实际线程项目开发之中出现的死锁、阻塞、资源访问与公平机制。
此笔记主要记录java.util.concurrent开发包之中的各个核心组成类的使用、操作原理分析,并且通过具体的实际代码对多线程的开发实际环境进行原理分析,同时方便自己随时复习掌握。
此学习笔记来源于课程MLDN《JUC线程框架深度讲解》,有兴趣的小伙伴们可以购买学习!
多线程是Java开发的主要特色,也是所有的编程开发之中最为麻烦的部分,对于多线程不妨做出如下几个简单思考:
在正常情况下所使用的多线程模型实际上经历了如下几个步骤:
(1)Executor
public interface Exector //具体Runnable任务的执行者
(2)ExecutorService
public interface ExecutorService extends Executor //一个线程池管理者,能把Runnable,Callable提交到池中进行调度
(3)Semaphore
public class Semaphore implements java.io.Serializable //一个计数信号量
(4)ReentrantLock
public class ReentrantLock implements Lock, java.io.Serializable //一个可重入的互斥锁定Lock,功能类似synchronized,但要强大很多
(5)Future
public interface Future<V> //是与Runnable,Callable进行交互的接口,比如一个线程执行结束取返回的结果等等,还提供了cancel终止线程
(6)BlockingQueue
public interface BlockingQueue<E> extends Queue<E> //阻塞队列
(7)CompletionService
public interface CompletionService<V> //ExecutorService的扩展,可以获得线程执行结果
(8)CountDownLatch
public class CountDownLatch //一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等
(9)Callable
public interface Callable<V> //A task that returns a result and may throw an exception.
(10)CyclicBarrier
public class CyclicBarrier //一个同步辅助类,它允许一组线程互相等待,直到达到某个公共屏障点
(11)ScheduledExecutorService
public interface ScheduledExecutorService extends ExecutorService //一个ExecutorService,可安排在给定的延迟后运行或定期执行的命令