Java:是CountDownLatch线程安全

tre*_*der 7 java thread-safety countdownlatch

文档CountDownLatch我看到类似的东西:

public void run() {
      try {
        startSignal.await();
        doWork();
        doneSignal.countDown();
      } catch (InterruptedException ex) {} // return;
}

这里startSignaldoneSignalCountDownLatch对象.

文档没有提到关于类是否是线程安全的.

Old*_*eon 7

由于它的设计是由多个线程使用这将是公平的假设,它线程安全的最含义线程安全的.

甚至有一个事先发生的承诺(来自您的链接):

内存一致性影响:在计数达到零之前,调用countDown()之前的线程中的操作发生在从另一个线程中的相应await()成功返回之后的操作之前.

参考你的具体问题如果两个线程同时调用countDown怎么办?它不会只是有效地执行倒计时行动吗?不,countDown每次都会采取行动.

  • @treecoder你似乎把"一个方法是线程安全的"等同于"一个方法是同步的".那是不对的.有几种方法可以使方法成为线程安全的,而不会使其同步.CountDownLatch在内部使用非阻塞线程安全操作.java.util.concurrent下的所有内容都设计为由多个线程使用. (2认同)