• CountDownLatch


    1、CountDownLatch是一个线程同步类,位于java.util.concurrent包中。

    工作方式:CountDownLatch通过计数器来实现的,计数器的初始值为线程的数量,每当一个线程执行完,计数器就减1,当计数器为0时,调用了await()处于等待的线程就恢复执行任务。

    实现原理:让需要的暂时阻塞的线程,进入一个死循环里面,得到某个条件后再退出循环,以此实现阻塞当前线程的效果。

    通过内部类Sys继承AbstractQueuedSynchronizer实现

    构造方法、await()、countDown、await(long time, TimeUnit unit)。

    线程要对异常进行处理。

    有哪些典型的应用。

    CountDownLatch是不可逆的,即不可能重新初始化或者修改CountDownLatch对象的内部计数器的值。一旦计数器的值初始后,唯一可以修改它的方法就是之前用的 countDown() 方法,也就是只能创建CountDownLatch对象,并使其内部值减少,不能重新修改或增加内部值。当计数器到达0时, 全部调用 await() 方法将会立刻返回,后面再调用此CountDownLatch对象的countDown() 方法都将不会产生任何作用。后续会介绍CyclicBarriar,它除了可以实现CountDownLatch的功能外,还可以重新进行初始化,重复使用。 

    部分源码:

    private static final class Sync extends AbstractQueuedSynchronizer {
            private static final long serialVersionUID = 4982264981922014374L;
    
            Sync(int count) {
                setState(count);
            }
    
            int getCount() {
                return getState();
            }
    
            protected int tryAcquireShared(int acquires) {
                return (getState() == 0) ? 1 : -1;
            }
    
            protected boolean tryReleaseShared(int releases) {
                // Decrement count; signal when transition to zero
                for (;;) {
                    int c = getState();
                    if (c == 0)
                        return false;
                    int nextc = c-1;
                    if (compareAndSetState(c, nextc))
                        return nextc == 0;
                }
            }
        }
    
        private final Sync sync;
    
    
        public CountDownLatch(int count) {
            if (count < 0) throw new IllegalArgumentException("count < 0");
            this.sync = new Sync(count);
        }
  • 相关阅读:
    Exp4 恶意代码分析 Week6
    Exp3 免杀原理与实践 Week5
    Exp2 后门原理与实践 Week4
    Exp1 PC平台逆向破解 Week3
    Exp0 Kali安装 Week1
    2018-2019-2 《网络对抗技术》Exp9 WebGoat 20165326
    2018-2019-2 《网络对抗技术》Exp8 Web基础 20165326
    2018-2019-2 《网络对抗技术》Exp7 网络欺诈防范 20165326
    2018-2019-2 《网络对抗技术》Exp6 信息搜集与漏洞扫描 20165326
    2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 20165326
  • 原文地址:https://www.cnblogs.com/xhongqing/p/13920157.html
Copyright © 2020-2023  润新知