背景:虽然这个类很常用,但是没有写过这个类的源码分析,因为相对前面分析的其他并发类而言,这个类简单了一些。想手写实现这样一个功能是很容易做到的。
实现功能:实现countDownLatch的await和countDown功能。
就这么几行代码。
public class DiyCountDown {
private AtomicInteger size;
private Thread parkThread;
public DiyCountDown(int count){
size = new AtomicInteger(count);
}
public void countDown(){
int i = size.decrementAndGet();
if(i <= 0){
LockSupport.unpark(parkThread);
}
}
public void await(){
if(size.get() > 0){
parkThread = Thread.currentThread();
LockSupport.park();
}
}
}
测试
class CountDownTest{
public static void main(String[] args) {
DiyCountDown diyCountDown = new DiyCountDown(10);
for(int i = 0; i < 10; i++){
new Thread(){
@Override
public void run() {
System.out.println("hello world");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
diyCountDown.countDown();
}
}.start();
}
diyCountDown.await();
System.out.println("finish");
}
}
网友评论