CountDownLatch使用

2017-09-12  本文已影响0人  jack4c

CountDownLatch使用

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

使用

1.初始化

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

2.方法

代码示例:

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 方法更为灵活

上一篇下一篇

猜你喜欢

热点阅读