写一个CountDownLatch

2019-06-28  本文已影响0人  无聊之园

背景:虽然这个类很常用,但是没有写过这个类的源码分析,因为相对前面分析的其他并发类而言,这个类简单了一些。想手写实现这样一个功能是很容易做到的。

实现功能:实现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");
    }
}
上一篇下一篇

猜你喜欢

热点阅读