Java 线程:如何同时执行一条语句

Ram*_*aja 1 java multithreading

考虑到我有一个如下的 run 方法,我正在尝试为 MyThread 创建四个线程。语句 1 到 3 可以由线程同时或不同方式运行。但我希望语句 4 由线程同时执行。我可以将语句 4 之前的所有线程池化并由所有线程同时执行语句 4 吗?

class MyThread extends Thread
{ 
    public void run()
    {
        //Statement 1
    //Statement 2
    //Statement 3
    //Statement 4
    }

}
Run Code Online (Sandbox Code Playgroud)

Par*_*eep 5

使用 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
    }
}
Run Code Online (Sandbox Code Playgroud)