首页 > 其他分享 >手写CountDownLatch

手写CountDownLatch

时间:2024-07-25 14:09:34浏览次数:14  
标签:count int sync Sync countDown CountDownLatch 手写 public

手写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();
        ;
    }

}

 

标签:count,int,sync,Sync,countDown,CountDownLatch,手写,public
From: https://www.cnblogs.com/shanheyongmu/p/18322893

相关文章

  • 手写Semaphore信号量
    publicclassMySemaphore{privateSyncsync;publicMySemaphore(intcount){sync=newSync(count);}publicvoidacquire(){sync.acquireShared(1);}publicvoidrelease(){sync.releaseShared(1);......
  • netty应用-手写RPC
    文章目录手写RPC之案例定位与通信过程介绍RPC框架案例定位服务端与客户端架构通信过程1.服务注册与发现2.请求序列化与传输3.请求处理与响应4.响应反序列化与结果处理实现细节1.服务端2.客户端技术选型关键挑战总结手写RPC之请求响......
  • 手写操作系统:一切从主引导扇区开始
    项目简介本项目将从零实现一个基于x8632位的操作系统,系统支持多进程的运行,虚拟内存,进程与进程之间隔离,文件系统。开发语言:汇编语言与C语言,主要是C语言。开发工具:gcc编译器,gdb调试器,qemu虚拟机,dd工具,CMake.........开发环境:windows11操作系统,VScode编辑器。计算机启动......
  • 手写Kd树(C++模板非递归实现)
    手写Kd树(C++模板非递归实现)1.Kd树1.1Kd树简介1.2Kd树的建立1.3Kd树的查找2.C++完整代码实现3.测试代码3.1代码实现3.2测试结果4.与PCL中的Kd树做对比本文实现的Kd树实现参考了高翔博士的书《自动驾驶与机器人中的slam技术从理论到实践》;高博士原书中是递归......
  • 卷积神经网络CNN实战:MINST手写数字识别——数据集下载与网络训练
    数据集下载这一部分比较简单,就不过多赘述了,把代码粘贴到自己的项目文件里,运行一下就可以下载了。fromtorchvisionimportdatasets,transforms#定义数据转换,将数据转换为张量并进行标准化transform=transforms.Compose([transforms.ToTensor(),#转换为张量......
  • 用 300 行代码手写提炼 Spring 核心原理 [2]
    系列文章用300行代码手写提炼Spring核心原理[1]用300行代码手写提炼Spring核心原理[2]上文中我们实现了mini-spring的1.0版本,接下来我们在此基础上进行优化,将init()方法中的代码进行封装。按照之前的思路,先搭建基础框架,再“填肉注血”。初始化阶段in......
  • 用 300 行代码手写提炼 Spring 核心原理 [1]
    手写一个mini版本的Spring框架是一个很好的实践项目,可以让你对框架的核心概念和实现有更深刻的理解。接下来我们从0-1逐层深入,一步一步揭开Spring的神秘面纱。自定义配置配置application.properties为了解析方便,我们用application.properties来代替application.......
  • 用 300 行代码手写提炼 Spring 核心原理 [1]
    手写一个mini版本的Spring框架是一个很好的实践项目,可以让你对框架的核心概念和实现有更深刻的理解。接下来我们从0-1逐层深入,一步一步揭开Spring的神秘面纱。自定义配置配置application.properties为了解析方便,我们用application.properties来代替application.......
  • 【深度学习入门项目】多层感知器(MLP)实现手写数字识别
    多层感知器(MLP)实现手写数字识别导入必要的包获得软件包的版本信息下载并可视化数据查看一个batch的数据查看图片细节信息设置随机种子定义模型架构Buildmodel_1Buildmodel_2TraintheNetwork(30marks)Trainmodel_1Trainmodel_1Visualizethetrainingprocess......
  • JavaScript - jSignature移动端手写签名
    <html><head><scriptsrc="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><scriptsrc="https://cdn.bootcdn.net/ajax/libs/jSignature/2.1.3/jSignature.min.js"></script>......