Java - 在特定点上同步线程

标签 java multithreading

我需要在某个检查点同步一些线程,只有所有线程都到达这个点后,它们才应该继续。有什么简单的构造方法吗?

for (int v = 0; v < 10; v++) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {

                doFirst();

                //checkpoint

                doSecond();

            } catch (Throwable e) {
                    e.printStackTrace();
            }
        }
    }).start();
}

最佳答案

import java.util.concurrent.CountDownLatch;
private CountDownLatch countDownLatch = new CountDownLatch(10)
...
public void run() {
    doFirst();
    countDownLatch.countDown();
    countDownLatch.await();
    doSecond();
}

---- 或(少 1 行代码)----

import java.util.concurrent.CyclicBarrier;
private CyclicBarrier cyclicBarrier= new CyclicBarrier(10)
...
public void run() {
    doFirst();
    cyclicBarrier.await();
    doSecond();
}

关于Java - 在特定点上同步线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022054/

相关文章:

java - 在 Java 中分配大量相对较小的对象

java - JDBC 根据另一个 select 语句的结果执行 select 语句

java - 如何在int中添加空格?

multithreading - 防止 Delphi MDI 应用程序在外部 DLL 中创建 TApplication

java - Java中RandomAccessFile的并发

计算文本给定文件中的行数、单词数和字符数的 Java 程序

java - 如何将 Java FloatBuffer(或任何 Buffer)保存到文件

c# - Linux 下 AutoResetEvent 的 C++ 等价物是什么?

php - 我可以相信 mysql_insert_id() 返回正确的值,多线程偏执狂

Java线程安全的Sqlite?