《java.util.concurrent 包源码阅读》 结束语

《java.util.concurrent 包源码阅读》系列文章已经全部写完了。开始的几篇文章是根据自己的读书笔记整理出来的(当时只阅读了部分的源代码),后面的大部分都是一边读源代码代码,一边写文章。

由于水平有限,在阅读源代码的时候,分析得也比较浅显,也有很多地方自己也没有研究明白,文章有的地方显得语焉不详,只能请各位多多见谅了。

后面会继续写一些关于Java并发编程的文章,希望各位多多指教。

这里整理了一个简单的目录,包含了本系列所有文章的链接:

《java.util.concurrent 包源码阅读》01 源码包的结构
《java.util.concurrent 包源码阅读》02 关于java.util.concurrent.atomic包
《java.util.concurrent 包源码阅读》03 锁
《java.util.concurrent 包源码阅读》04 ConcurrentMap
《java.util.concurrent 包源码阅读》05 BlockingQueue
《java.util.concurrent 包源码阅读》06 ArrayBlockingQueue
《java.util.concurrent 包源码阅读》07 LinkedBlockingQueue
《java.util.concurrent 包源码阅读》08 CopyOnWriteArrayList和CopyOnWriteArraySet
《java.util.concurrent 包源码阅读》09 线程池系列之介绍篇
《java.util.concurrent 包源码阅读》10 线程池系列之AbstractExecutorService
《java.util.concurrent 包源码阅读》11 线程池系列之ThreadPoolExecutor 第一部分
《java.util.concurrent 包源码阅读》12 线程池系列之ThreadPoolExecutor 第二部分
《java.util.concurrent 包源码阅读》13 线程池系列之ThreadPoolExecutor 第三部分
《java.util.concurrent 包源码阅读》14 线程池系列之ScheduledThreadPoolExecutor 第一部分
《java.util.concurrent 包源码阅读》15 线程池系列之ScheduledThreadPoolExecutor 第二部分
《java.util.concurrent 包源码阅读》16 一种特别的BlockingQueue:SynchronousQueue
《java.util.concurrent 包源码阅读》17 信号量 Semaphore
《java.util.concurrent 包源码阅读》18 Exchanger
《java.util.concurrent 包源码阅读》19 PriorityBlockingQueue
《java.util.concurrent 包源码阅读》20 DelayQueue
《java.util.concurrent 包源码阅读》21 CyclicBarrier和CountDownLatch
《java.util.concurrent 包源码阅读》22 Fork/Join框架的初体验
《java.util.concurrent 包源码阅读》23 Fork/Join框架之Fork的冰山一角
《java.util.concurrent 包源码阅读》24 Fork/Join框架之Work-Stealing
《java.util.concurrent 包源码阅读》25 Fork/Join框架之Fork与Work-Stealing(重写23,24)
《java.util.concurrent 包源码阅读》26 Fork/Join框架之Join
《java.util.concurrent 包源码阅读》27 Phaser 第一部分
《java.util.concurrent 包源码阅读》28 Phaser 第二部分
时间: 2024-10-05 04:27:45

《java.util.concurrent 包源码阅读》 结束语的相关文章

《java.util.concurrent 包源码阅读》13 线程池系列之ThreadPoolExecutor 第三部分

这一部分来说说线程池如何进行状态控制,即线程池的开启和关闭. 先来说说线程池的开启,这部分来看ThreadPoolExecutor构造方法: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecut

《java.util.concurrent 包源码阅读》06 ArrayBlockingQueue

对于BlockingQueue的具体实现,主要关注的有两点:线程安全的实现和阻塞操作的实现.所以分析ArrayBlockingQueue也是基于这两点. 对于线程安全来说,所有的添加元素的方法和拿走元素的方法都会涉及到,我们通过分析offer方法和poll()方法就能看出线程安全是如何实现的. 首先来看offer方法 public boolean offer(E e) { checkNotNull(e); final ReentrantLock lock = this.lock; lock.lo

《java.util.concurrent 包源码阅读》05 BlockingQueue

想必大家都很熟悉生产者-消费者队列,生产者负责添加元素到队列,如果队列已满则会进入阻塞状态直到有消费者拿走元素.相反,消费者负责从队列中拿走元素,如果队列为空则会进入阻塞状态直到有生产者添加元素到队列.BlockingQueue就是这么一个生产者-消费者队列. BlockingQueue是Queue的子接口 public interface BlockingQueue<E> extends Queue<E> BlockingQueue拿走元素时,如果队列为空,阻塞等待会有两种情况:

《java.util.concurrent 包源码阅读》14 线程池系列之ScheduledThreadPoolExecutor 第一部分

ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,同时实现了ScheduledExecutorService接口. public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService ScheduledThreadPoolExecutor的功能主要有两点:在固定的时间点执行(也可以认为是延迟执行),重复执行.

《java.util.concurrent 包源码阅读》10 线程池系列之AbstractExecutorService

AbstractExecutorService对ExecutorService的执行任务类型的方法提供了一个默认实现.这些方法包括submit,invokeAny和InvokeAll. 注意的是来自Executor接口的execute方法是未被实现,execute方法是整个体系的核心,所有的任务都是在这个方法里被真正执行的,因此该方法的不同实现会带来不同的执行策略.这个在后面分析ThreadPoolExecutor和ScheduledThreadPoolExecutor就能看出来. 首先来看su

《java.util.concurrent 包源码阅读》03 锁

Condition接口 应用场景:一个线程因为某个condition不满足被挂起,直到该Condition被满足了. 类似与Object的wait/notify,因此Condition对象应该是被多线程共享的,需要使用锁保护其状态的一致性 示例代码: class BoundedBuffer { final Lock lock = new ReentrantLock(); final Condition notFull = lock.newCondition(); final Condition

《java.util.concurrent 包源码阅读》02 关于java.util.concurrent.atomic包

Aomic数据类型有四种类型:AomicBoolean, AomicInteger, AomicLong, 和AomicReferrence(针对Object的)以及它们的数组类型, 还有一个特殊的AomicStampedReferrence,它不是AomicReferrence的子类,而是利用AomicReferrence实现的一个储存引用和Integer组的扩展类 首先,所有原子操作都是依赖于sun.misc.Unsafe这个类,这个类底层是由C++实现的,利用指针来实现数据操作 关于CAS

《java.util.concurrent 包源码阅读》11 线程池系列之ThreadPoolExecutor 第一部分

先来看ThreadPoolExecutor的execute方法,这个方法能体现出一个Task被加入到线程池之后都发生了什么: public void execute(Runnable command) { if (command == null) throw new NullPointerException(); /* 如果运行中的worker线程数少于设定的常驻线程数,增加worker线程,把task分配给新建的worker线程 */ int c = ctl.get(); if (worker

《java.util.concurrent 包源码阅读》09 线程池系列之介绍篇

concurrent包中Executor接口的主要类的关系图如下: Executor接口非常单一,就是执行一个Runnable的命令. public interface Executor { void execute(Runnable command); } ExecutorService接口扩展了Executor接口,增加状态控制,执行多个任务返回Future. 关于状态控制的方法: // 发出关闭信号,不会等到现有任务执行完成再返回,但是现有任务还是会继续执行, // 可以调用awaitTe