美文网首页
写一个CountDownLatch

写一个CountDownLatch

作者: 无聊之园 | 来源:发表于2019-06-28 15:42 被阅读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");
        }
    }
    

    相关文章

      网友评论

          本文标题:写一个CountDownLatch

          本文链接:https://www.haomeiwen.com/subject/xqqecctx.html