使用CyclicBarrier,它最适合您的要求。
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierUsage {
private static final int NUMBER_OF_THREADS = 2;
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(NUMBER_OF_THREADS);
Thread t1 = new Thread(new PrimaryParty(barrier));
Thread t2 = new Thread(new PrimaryParty(barrier));
t1.start();
t2.start();
}
}
class PrimaryParty implements Runnable {
private CyclicBarrier barrier;
public PrimaryParty(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
//Statement 1
//Statement 2
//Statement 3
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
//Statement 4
}
}
我认为你对Java中的线程,并发和同步有着很大的误解。我会推荐[并发Oracle轨道](https://docs.oracle.com/javase/tutorial/essential/concurrency/)。我现在可以给你的唯一“答案”是预先烘焙的代码,你可以复制粘贴,但你不会学到任何东西。 – Turing85
是的,你可以。一种方法是通过使用类[java.util.concurrent.CountdownLatch](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html)。创建它的计数为3,在前三个线程中每个线程的末尾倒计数,并等待它在第四个线程中达到零。 –
你的意思是你不想让任何线程启动语句4,直到所有线程完成语句3? –