- 博客(95)
- 资源 (4)
- 收藏
- 关注
原创 Java多线程 -- JUC包源码分析15 -- SynchronousQueue与CachedThreadPool
在前面分析工具类Executors的时候,提到了CachedThreadPool:其线程数会无限增大,每来一个新请求,就会new一个Thread,其maxPoolSize = Integer.MAX。 其构造函数如下:public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor
2016-09-11 16:19:16
1958
原创 Java多线程 -- JUC包源码分析14 -- ScheduledThreadPoolExecutor与DelayQueue源码分析
DelayQueueScheduledThreadPoolExecutor
2016-09-10 20:28:16
1258
原创 Java多线程 -- JUC包源码分析13 -- Callable/FutureTask源码分析
关于Runnable,我们都已经很熟悉了。在上一篇,我们也分析了ThreadPoolExecutor用来执行任务的接口execute,如下所示:public interface Runnable { public abstract void run();}public void execute(Runnable command) { 。。。 }这里的execute(..)是没有返回值
2016-09-10 20:21:04
1647
原创 Java多线程 -- JUC包源码分析12 -- ThreadPoolExecutor源码分析
在JUC包中,线程池部分本身有很多组件,可以说是前面所分析的各种技术的一个综合应用。从本文开始,将综合前面的知识,逐个分析线程池的各个组件。 -Executor/Executors -ThreadPoolExecutor使用介绍 -ThreadPoolExecutor实现原理 –ThreadPoolExecutor的中断与优雅关闭 shutdown + awaitTermination –
2016-09-09 15:17:30
3285
3
原创 Java多线程 -- JUC包源码分析11 -- CyclicBarrier源码分析
在前面的篇章中,讲解了ReentrantLock + Condition,并讲述了2者结合的一个典型应用:ArrayBlockingQueue/LinkedBlockingQueue。今天讲述2者结合的另一个典型应用:CyclicBarrier。CyclicBarrier的概念要介绍CyclicBarrier这个概念,可以从下面这个比喻开始:一个小公司的所有人周六要出去团建,大家提前商定好周六早上
2016-09-08 23:19:23
1091
原创 Java多线程 -- JUC包源码分析10 -- ConcurrentLinkedQueue源码分析
在前面的篇章中,我们详细分析了AQS,并提到了里面一个关键数据结构:所有阻塞线程组成的一个等待队列,这个队列是用单向无锁链表实现的。今天所讲的ConcurrentLinkedQueue,其实现和AQS中的无锁队列基本一样。所以,如果你深刻理解了AQS,ConcurrentLinkedQueue也就知道了。出于内容的完整性,在此还是列一下其源码:public class ConcurrentLinke
2016-09-08 22:53:07
966
原创 Java多线程 -- JUC包源码分析9 -- AbstractQueuedSynchronizer深入分析-- Semaphore与CountDownLatch
在前面分析ReentrantLock/ReentrantReadWriteLock的时候,我们已经对AQS进行过分析。在初步了解了AQS之后,本篇试图对其进行一个更为系统性的分析。因为AQS是为整个同步框架的基石,不光是锁,很多其他同步组件,比如Semaphore, CountDownLatch,也都是建立在AQS之上。 -AQS–同步框架的基石 -AQS的3个核心技术原理 –AQS源码解析
2016-09-07 23:51:04
1760
原创 Java多线程 -- JUC包源码分析8 -- 对happen before的深刻理解
说到happen before,很多人都知道。但因为其理论的抽象,以及在语义上的微妙,使得对happen before的理解,往往陷入“隔靴搔痒“的境地。本文试图宏观性、多角度的来分析围绕happen before的诸多问题,从而搞清楚我们为什么需要happen before?-可见性 -重排序 -happen before -共享存储模型 vs. 消息模型可见性说到可见性,很多人立马会想到v
2016-09-06 12:03:39
1419
原创 Java多线程 -- JUC包源码分析7 -- 对Interrupt的深刻理解
在前面的源码分析中,很多地方用到了Interrupt,在此,对Interrupt做一个深刻总结。一、“中断“这个词有误区,它并不是真的中断一个线程,准备说,应该叫做“中断轻量级阻塞”。什么叫“轻量级阻塞”呢? 就是调用以下这几个函数,所造成的线程阻塞。此时线程是处于Waiting状态,会响应t.interrupt。响应方式,前4个,是直接抛出InterruptException异常,最后1个,是
2016-09-05 23:57:12
1176
原创 Java多线程 -- JUC包源码分析6 -- ConcurrentHashMap
ConcurrentHashMap的源码,从JDK1.6到JDK1.7, 经历了不少变化。在JDK1.7中,好几个地方使用了sun.misc.Unsafe里面的函数,比如UNSAFE.putOrderedObject, UNSAFE.getObject..。对于这些函数的原理,笔者也不甚理解。为此,本文的讨论只针对JDK1.6。 -锁分离 -读不加锁,锁加锁 -弱一致性, happen b
2016-09-05 21:21:10
1497
原创 Java多线程 -- JUC包源码分析5 -- Condition/ArrayBlockingQueue/LinkedBlockingQueue/Deque/PriorityBlockingQueue
-await/signal/signalAll与wait/notify/notifyAll区别 -Condition源码分析 -各种BlockingQueue源码分析await,signal,signalAll以下代码,分别展示了wait/notify, 和Condition的await/signal的用法Object o = new Object();synchronized(o) /
2016-09-05 01:34:14
2012
原创 Java多线程 -- JUC包源码分析4 -- 各种锁与无锁
说到锁,想必很多人就会被如下的各种专业名词绕晕了。本文试图厘清关于锁的各种概念,从而对锁有一个全面而深入的理解。–自旋锁/阻塞锁 –独占锁(排它锁)/共享锁(读写锁) –公平锁/非公平锁 –偏向锁/非偏向锁 –可重入锁 –悲观锁/乐观锁 –ReentrantLock源码分析 –AbstractQueuedSynchronized(队列同步器) –源码分析 –ReentrantRead
2016-09-03 21:18:58
2684
1
原创 Java多线程 -- JUC包源码分析3-- volatile/final语义
-volatile应用1 – 内存可见性 – JMM内存模型 -volatile应用2 – 原子性 -volatile应用3 – 构造函数逸出/DCL问题(Double Checking Locking) -final应用1 – 避免构造函数重排序 -final应用2 – CopyOnWrite -atomic数组/volatile数组/final数组/ -指令重排序,happen be
2016-09-03 21:13:40
2057
原创 Java多线程 -- JUC包源码分析2 -- Copy On Write/CopyOnWriteArrayList/CopyOnWriteArraySet
上1篇讲述了Java并发编程的第1个基本思想–CAS/乐观锁,这1篇接着讲述并发编程的第2个基本思想:CopyOnWrite - CopyOnWrite基本思想 - CopyOnWriteArrayList - CopyOnWriteArraySet - AtomicReference的一个应用 - 总结CopyOnWrite基本思想 CopyOnWrite, 顾名思义
2016-09-03 21:05:28
1829
原创 Java多线程 -- JUC包源码分析1 -- CAS/乐观锁
乐观锁思想乐观锁的几种具体实现Java CAS原子操作/AtomicInteger实现ABA问题/AtomicStampedReference实现Mysql 乐观锁实现Mysql MVCC总结乐观锁思想问题的提出: 当多个线程或客户端并发修改同1份数据时,不加锁,如何实现互斥访问?乐观锁基本思路: 给数据本身加一个版本号字段,读取和写入时都不加锁。数据读出来的时候,此时版本号
2016-09-03 17:04:32
2900
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人