美文网首页
CountDownLatch使用

CountDownLatch使用

作者: jack4c | 来源:发表于2017-09-12 15:11 被阅读0次

    CountDownLatch使用

    CountDownLatch是java中的一个同步工具类.用于对线程的阻塞和唤醒

    使用

    1.初始化

    在初始化创建对象时需要传入一个int类型的count值.

    2.方法

    • getCount 获取当前对象的count 值.
    • countDown 将当前对象的count 值减1.
    • await调用CountDownLatch对象的await方法时会阻塞当前线程,当这个对象的count为0时会唤醒这个对象调用await方法阻塞的所有线程 .
    • await(long time,TimeUnit unit) await 方法重载,在如果阻塞的时间超过定义的超时时间,线程自动唤醒

    代码示例:

    package concurrent;
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.TimeUnit;
         public class Test {
            private CountDownLatch countDownLatch = new CountDownLatch(1);
            public void method1(String name) {
                try {
                    //countDownLatch.await();  //阻塞线程,到countDownLatch对象的count等于0时唤醒
                     countDownLatch.await(10L,TimeUnit.SECONDS); //阻塞线程,如果在10秒后还没有被唤醒,将自动唤醒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(System.currentTimeMillis() + " " + Thread.currentThread().getName() + " - " + name + " 被唤醒");
            }
        
            public void method2(String name) {
                System.out.println(Thread.currentThread().getName() + "  " + name);
                try {
                    TimeUnit.SECONDS.sleep(5);
                    countDownLatch.countDown(); // 将count值减1
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        
            public static void main(String[] args) throws InterruptedException {
                Test test = new Test();
                new Thread(() -> {
                    test.method1("method1");
                }).start();
                new Thread(() -> {
                    test.method2("method2");
                }).start();
                new Thread(() -> {
                    test.method1("method3");
                }).start();
            }
        
    }
    

    使用场景

    在需要线程同步的场景下使用,比使用wait notify 方法更为灵活

    相关文章

      网友评论

          本文标题:CountDownLatch使用

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