`
BrokenDreams
  • 浏览: 254365 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
68ec41aa-0ce6-3f83-961b-5aa541d59e48
Java并发包源码解析
浏览量:100311
社区版块
存档分类
最新评论
文章列表
Jdk1.6 JUC源码解析(19)-ScheduledThreadPoolExecutor 作者:大飞   功能简介: ScheduledThreadPoolExecutor是一种类似Timer的定时器或者说是调度器,和Timer比起来主要有几点好处:1.多线程的定时调度,timer是单线程的,每个timer实例只有一 ...
Jdk1.6 JUC源码解析(18)-DelayQueue 作者:大飞   功能简介: DelayQueue是一种无界的阻塞队列,队列里只允许放入可以"延期"的元素,队列中列头的元素是最先"到期"的元素。如果队列中没有任何元素"到期",尽管队列中有元素,也不能从队列头获取到任何元素。 源码分析: 首先还是看一下内部数据结构: public class DelayQueue<E extends Delayed> extends AbstractQueue<E> imple ...
Jdk1.6 JUC源码解析(17)-ThreadPoolExecutor 作者:大飞   功能简介: ThreadPoolExecutor是JUC包中提供的线程池,使用ThreadPoolExecutor的好处一方面是能重用线程资源,避免重复创建线程带来的开销;另一方面是ThreadPoolExecutor提供了内部资源(线程、任务)的管理功能,方便我们监控线程池工作状态。 源码分析: 首先,ThreadPoolExecutor继承了AbstractExecutorService,实现了ExecutorService和Executor,先自顶向下简单分析下这些类: ...
Jdk1.6 JUC源码解析(16)-FutureTask 作者:大飞   功能简介: FutureTask是一种异步任务(或异步计算),举个栗子,主线程的逻辑中需要使用某个值,但这个值需要复杂的运算得来,那么主线程可以提前建立一个异步任务来计算这个值(在其他的线程中计算),然后去做其他事情,当需要这个值的时候再通过刚才建立的异步任务来获取这个值,有点并行的意思,这样可以缩短整个主线程逻辑的执行时间。 FutureTask也是基于AQS来构建的,使用共享模式,使用AQS的状态来表示异步任务的运行状态。 源码分析: 先来看下FutureTask都实现了哪些接口。首先 ...
Jdk1.6 JUC源码解析(15)-SynchronousQueue 作者:大飞   功能简介: SynchronousQueue是一种特殊的阻塞队列,它本身没有容量,只有当一个线程从队列取数据的同时,另一个线程才能放一个数据到队列中,反之亦然。存取过程相当于一个线程把数据(安全的)交给另一个线程的过程。 SynchronousQueue也支持公平和非公平模式。 源码分析: SynchronousQueue内部采用伪栈和伪队列来实现,分别对应非公平模式和公平模式。先看下这部分实现。        伪栈和伪队列的公共基类: static abst ...
Jdk1.6 JUC源码解析(14)-PriorityBlockingQueue 作者:大飞   功能简介: PriorityBlockingQueue是一种基于PriorityQueue实现的无界的阻塞队列。队列中的元素按照某种排序规则出队。插入队列的元素必须是可比较的。 源码分析: 首先 ...
Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue 作者:大飞   功能简介: LinkedBlockingQueue是一种基于单向链表实现的有界的(可选的,不指定默认int最大值)阻塞队列。队列中的元素遵循先入先出(FIFO)的规则。新元素插入到队列的尾部,从队列头部取出元素。(在并发程序中,基于链表实现的队列和基于数组实现的队列相比,往往具有更高的吞吐量,但性能稍差一些) 源码分析: 首先看下LinkedBlockingQueue内部的数据结构: public class LinkedBlockingQueue<E> e ...
Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue 作者:大飞   功能简介: ArrayBlockingQueue是一种基于数组实现的有界的阻塞队列。队列中的元素遵循先入先出(FIFO)的规则。新元素插入到队列的尾部,从队列头部取出元素。 和普通队列 ...
Jdk1.6 JUC源码解析(11)-CyclicBarrier 作者:大飞   功能简介: CyclicBarrier是一种可重复使用的栅栏机制,可以让一组线程在某个点上相互等待,这个点就可以类比为栅栏。并且这个栅栏是可重复使用的,这点可以和前面分析过的CountDownLatch做对比,CountDownLatch只能用一次。 CyclicBarrier还支持在所有线程到达栅栏之后,在所有线程从等待状态转到可运行状态之前,执行一个命令(或者说是动作)。 当然,在某些情况下,栅栏可以被打破。比如某个线程无法在规定的时间内到达栅栏。 源码分析: 先看下Cycli ...
Jdk1.6 JUC源码解析(10)-Semaphore 作者:大飞   功能简介: Semaphore是一种基于计数的信号量,管理了一组许可。线程可以申请许可,当信号量中有许可时,线程申请成功,拿走一个许可;没有许可时,线程阻塞等待其他线程用完了许可,归还给信号量。这个许可不是真正的许可(比如凭证),只是一个计数,线程也不会真正使用这些许可。 Semaphore一般用来构建一些对象池,资源池之类的,比如数据库连接池。 可以创建一个count为1的Semaphore作为一种类似互斥锁的机制,也叫二元信号量,表示两种互斥状态。但和Lock有些区别,Lock只能又获取锁的线程来 ...
Jdk1.6 JUC源码解析(9)-CountDownLatch 作者:大飞   功能简介: CountDownLatch是一种锁,称为闭锁。可以让一个或多个线程等待另外一个或多个线程执行完毕后再执行。 CountDownLatch也是基于AQS构建,使用共享模式。 CountDownLatch中提供一个count值来表示要等待的(其他任务)完成次数,常规用法有两种:Count(1)和Count(N)。举个栗子,百米赛跑,N个选手,每个选手可以看成是一个线程。起跑前,选手准备(线程启动,然后在Count(1)上阻塞),当发令枪响后(相当于Count(1)闭锁释放),选手一起 ...
Jdk1.6 JUC源码解析(8)-locks-ReentrantReadWriteLock 作者:大飞   功能简介: ReentrantReadWriteLock提供了读写锁的机制,读锁使用AQS的共享模式,写锁使用独占模式。 ReentrantReadWriteLock也支持公平/非公平锁。 ReentrantReadWriteLock的写锁 ...
Jdk1.6 JUC源码解析(7)-locks-ReentrantLock 作者:大飞   功能简介: Java代码层面提供的锁机制,可做为Synchronized(jvm内置)的替代物,和Synchronized一样都是可重入的。 与Synchronized相比较而言,ReentrantLock有以下优势:支持公平/非公 ...
Jdk1.6 JUC源码解析(6)-locks-AbstractQueuedSynchronizer 作者:大飞   功能简介: AbstractQueuedSynchronizer(以下简称AQS)是Java并发包提供的一个同步基础机制,是并发包中实现Lock和其他同步机制(如:Semaphore、CountDownLatch和FutureTask等)的基础。 AQS内部包含一个FIFO的同步等待队列,简单的说,没有成功获取控制权的线程会在这个队列中等待。 AQS内部管理了一个原子的int域作为内部状态信息,并提供了一些方法来访问该域,基于AQS实现的同步机制可以按自己的 ...
Jdk1.6 JUC源码解析(5)-locks-LockSupport 作者:大飞   功能简介: LockSupport是用于构建锁和其他同步机制的基础类,提供了基本的线程阻塞行为。 源码分析: 看下LockSupport代码: public class LockSupport { private LockSupport() {} / ...
Global site tag (gtag.js) - Google Analytics