并发源码
文章平均质量分 67
iteye_8058
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap
ConcurrentHashMap 主要两个结构:Segment[] 和 HashEntry[] 每个Segment是一个ReentrantLock Segment结构跟HashMap差不多,成员:table,count,loadFactor,threshold,modCount 每个Segment继承ReentrantLock,实现Serializable 定义了一般的ma...2014-01-08 09:39:41 · 63 阅读 · 0 评论 -
MySimpleReadWriteLock
import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; publi...2014-02-07 14:36:18 · 67 阅读 · 0 评论 -
重入读写锁(ReentrantReadWriteLock)源码
tryAcquireShared exclusiveCount(state)!=0&&getExclusiveOwnerThread!=current//如果现在是写锁状态,并且当前线程不是拥有锁的线程 也就是如果是当前线程是拥有写锁的,读操作也可以进去 if(!readShouldBlock(current)&&CAS(state, state+SHARED_UNIT)){ c...原创 2014-01-23 13:35:37 · 91 阅读 · 0 评论 -
How to build a exclusive Lock
阻塞lock的基本流程 if(cas(0,acquire)) setExclusiveOwnerThread else if(current==getExclusiveOnwerThread) { setState(c+acquires) } addWaiter park ........................ for(;;) { p = node....原创 2014-01-21 09:47:30 · 127 阅读 · 0 评论 -
信号(Semaphore)源码
成员:sync 方法:acquire acquire(int) acquireUnInterruptibly acquireUnInterruptily(int) tryAcquire tryAcquire(int) tryAcquire(long, TimeUnit) tryAcquire(int, long, TimeUnit) release release(int) avai...原创 2014-01-20 16:33:08 · 95 阅读 · 0 评论 -
栅栏(CyclicBarrier)源码
成员:lock,trip(是lock的condition),parties,barrierCommand,generation,count 1、generation是为了标示这一次的栅栏是否被破坏。 2、parties就是构造函数时传入的参数,表示在trip之前需要执行的线程数。count被parties初始化,是一个变量,dowait时会减一,直至等于0的时候,触发nextGener...原创 2014-01-20 16:32:38 · 181 阅读 · 0 评论 -
闭锁(CountDownLatch)源码
成员sync 所含方法: await(),await(long, TimeUnit),countDown,getCount 内部静态类Sync extends AbstractQueuedSynchronizer 1、两个公开方法,await和countDown,不存在获取资源的操作,在初始化的时候已经设置state。tryAcquireShared只是做检查操作,如果等于0,就返回...原创 2014-01-20 16:25:49 · 84 阅读 · 0 评论 -
AQS源码阅读理解(uncompleted)
有head和tail 当acquire*操作的时候,如果我们定义的资源限制操作返回false时,会在tail端加入一个新的节点(Node里面的所有基础属性都是volatile,用CAS设置tail指针)。 然后利用LockSupport.part(this)阻塞。 当release的时候,如果我们定义的资源操作返回true,会将head节点的下一个SIGNAL节点的thread唤醒。 ...2014-01-20 16:19:59 · 96 阅读 · 0 评论 -
ConcurrentLinkedQueue
成员:head tail 内部类:Node item和next,Itr implements Iterator add offer 利用UNSAFE.compareAndSwapObject(p, nextOffSet, null, newNode)(p表示遍历整个链表一直到next为null为止的Node) 如果设置成功,调用UNSAFE.compareAndSwapObj...原创 2014-01-08 09:41:16 · 70 阅读 · 0 评论 -
线程池(ThreadPoolExecutor)
两个好处: 1、线程可以重复利用,不用对同步任务进行不断的创建销毁 2、可以限制和管理资源,如线程 两个结果组成: Set workers 表示每个正在跑的线程,在run中,先是处理第一个Task,处理完后会从workQueue中尝试拿到一个Task进行处理,如果没有,结束(keepAliveTime可以调节结束的延时)、删除这个worker BlockingQueue<...原创 2014-02-12 15:40:48 · 94 阅读 · 0 评论