
并发编程
xiao_long_guo
努力!奋斗!
展开
-
FutureTask 从源码分析为什么会线程阻塞
FutureTask 继承关系如下public FutureTask<V> implements RunnableFuture<V> { public FutureTask(Callable<V> callable) { if (calla原创 2018-03-18 22:29:42 · 2466 阅读 · 1 评论 -
CountDownLatch 源码的角度简析为什么线程能等待
Demopublic static void main(String[] args) { Worker worker1 = new Worker("worker1",1000l); Worker worker2 = new Worker("worker2",3000l); worker1.start(); worker2.start(); try {...原创 2018-03-12 23:21:20 · 272 阅读 · 0 评论 -
ArrayBlockingQueue
阻塞队列 当线程往队列里放,队列已满,等待队列不满条件(notFull)满足后线程才能继续 当线程往队列里取,队列已空,等待队列不空条件(notEmpty)满足后线程才能继续/** 队列不空条件 */ private final Condition notEmpty;/** 队列不满条件 */ private final Condition notFull;...原创 2018-03-12 23:37:06 · 1013 阅读 · 0 评论 -
ReentrantLock和AQS
demopublic static void main(String[]args){ final ReentrantLock lock = new ReentrantLock(); for(int j=0;j<5;j++){ new Thread(new Runnable(){ public vo...原创 2018-08-27 12:42:20 · 1072 阅读 · 0 评论 -
LinkedBlockingQueue 源码分析
LinkedBlockingQueue的结构如下,本质上是个单链表node(head)-&gt;node-&gt;node-&gt;node(last)static class Node&lt;E&gt; { E item; Node&lt;E&gt; next; Node(E x) { item = x; } }原创 2018-12-10 16:42:24 · 385 阅读 · 0 评论