- 博客(5)
- 收藏
- 关注
原创 Semaphore信号量源码解析
一、用法信号量,Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。 二、源码: 构造方法,设置可以同时运行的线程数量。这里可以设置是公平的,还是非公平的。这里先说非公平的。 acqurie()本质是AQS的方法,这个方法的本质就是看业务线的try的方法是否返回值小...
2018-08-18 22:39:37 515
原创 CyclicBarrier源码分析
字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。其实它和countDownLatch很类似,也是个计数器。但他有两个优点:1.一个他的计数器能复用,而countDownLatch减到...
2018-08-18 22:38:59 167
原创 基于CountDownLatch讲AQS之共享锁
一、用法先看CountDownLatch的用处和用法每个线程如果持有同一个CountDownLatch,当他们都调用countdownLatch的await()方法的时候,他们都会被挂起,只有当countdownLatch的数量减到0的时候,他们才会同时开始执行(这里CycliBarrier也可以做的)。也可以用它来控制线程的同时执行。如果把countDown放在run方法里,也可以做到等...
2018-08-18 21:52:58 1250
原创 从ReentrantLock讲AQS的Condition
一、用法下面我们从ReentrantLock切入,讲AQS提供的Conditon一系列方法。先看用法。private ReentrantLock lock = new ReentrantLock();private Condition condition=lock.newConditon();lock.lock()try{操作condition.await();//...
2018-08-17 17:06:03 324
原创 从ReentrantLock的lock unlock讲AQS的独占锁
一、用法首先看ReetrantLock的用法。private ReentrantLock lock = new ReentrantLock();lock.lock()try{操作}catch(){}finally{lock.unlock();}我们在需要加锁的操作前面使用lock()方法,然后进行操作,在fianlly里面释放锁。那么lock,unlock里...
2018-08-17 17:04:36 1163 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人