闭锁

一种同步工具类,可以延迟线程的进度直到闭锁的值等于0(终止状态)
可用于在执行一个任务前,必须把这个任务前的全部完成,才能执行这个任务。
比如,游戏要等所有玩家都准备好之后才开始 所有资源都初始化之后才开始加载类。

t.start();启动线程后继续向下执行,不过线程会在startGate.await();的地方等待

    public long timeTasks(int nThreads, final Runnable task)
            throws InterruptedException {
        final CountDownLatch startGate = new CountDownLatch(1);
        final CountDownLatch endGate = new CountDownLatch(nThreads);

        for (int i = 0; i < nThreads; i++) {
            Thread t = new Thread() {
                public void run() {
                    try {
                        //所有线程启动后,都会在这个地方等待startGate闭锁等于0  
                        startGate.await();
                        try {
                            //虽然是实现了runnable 不过task.run()不会启动线程 和执行普通方法一样
                            task.run();
                        } finally {
                            //每一个线程执行任务之后,countdown
                            endGate.countDown();
                        }
                    } catch (InterruptedException ignored) {
                    }
                }
            };
            t.start();
        }

        long start = System.nanoTime();
        //打开闭锁  startGate
        startGate.countDown();
        //等待endGate闭锁等0之后,继续向下执行
        endGate.await();
        long end = System.nanoTime();
        return end - start;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CountDownLatch闭锁是一种同步工具类 可以延迟线程的进度直到闭锁到达终止状态。Latch在英语中就是门...
    贾歌阅读 358评论 0 0
  • 闭锁 闭锁是一种同步工具类,可以延迟线程的进度直到线程到达终止状态。可以用于确保某些活动直到其他活动都完成后继续执...
    甚了阅读 315评论 0 0
  • CountDownLatch 闭锁可以使一个或多个线程等待一组事件的发生,内部的计数器记录了事件的数量。两个主要的...
    Cafebaby阅读 950评论 0 2
  • 闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态。 CountDownLatch是一种灵活的闭锁实现,它...
    卡巴拉的树阅读 1,838评论 0 4
  • 昨晚回家路上,一小男孩,小学生模样,见到ofo单车,就按开锁键,开不开就尝试转动第一个密码,试两次,仍然开不了,然...
    末之说阅读 272评论 0 0