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

时间:2017-04-21 16:43:04

标签: java multithreading

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

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

}

2 个答案:

答案 0 :(得分:1)

有几种方法可以做你想要的。也许最简单的方法是使用Java的Future实现。您可以定义一个(或多个)Futures,它们将在不同的线程上执行,阻塞直到它们都完成Future.get(),然后根据结果完成其他任务。

答案 1 :(得分:1)

使用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
    }
}
相关问题