手写CountDownLatch

手写CountDownLatch思路
1. 设置aqs类中的状态为2;
2. 调用await方法,让当前线程变为阻塞
3. 调用countDown方法的时候 状态-1,如果状态=0的情况下,则唤醒刚才阻塞的线程
 
复制代码
public class MyCountDownLatch {
    private Sync sync;

    private MyCountDownLatch(int count) {
        sync = new Sync(count);
    }

    public void await() {
        sync.acquireShared(1);
    }

    public void countDown() {
        sync.releaseShared(1);
    }

    class Sync extends AbstractQueuedSynchronizer {
        public Sync(int count) {
            setState(count);
        }

        @Override
        protected int tryAcquireShared(int arg) {
            return getState() > 0 ? -1 : 1;
        }

        @Override
        protected boolean tryReleaseShared(int arg) {
            for (; ; ) {
                int oldState = getState();
                int newSate = oldState - arg;
                if (compareAndSetState(oldState, newSate)) {
                    return true;
                }
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        MyCountDownLatch myCountDownLatch = new MyCountDownLatch(2);
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + "你好1");
            mayiktCountDownLatch.await();
            System.out.println(Thread.currentThread().getName() + "你好2");
        }).start();
        myCountDownLatch.countDown();
        myCountDownLatch.countDown();
        ;
    }

}
复制代码

 

posted @   山河永慕~  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2022-07-25 netty系列之:对聊天进行加密
2022-07-25 netty系列之:使用UDP协议
点击右上角即可分享
微信分享提示