有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

考虑到下面的运行方法,我尝试为MyTrk创建四个线程。语句1到3可以由线程同时运行,也可以以不同方式运行。但我希望语句4由线程同时执行。我可以在语句4之前汇集所有线程,并由所有线程同时执行语句4吗

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

}

共 (2) 个答案

  1. # 1 楼答案

    有几种方法可以满足您的需求。也许最简单的方法是使用Java的Future实现。您可以定义一个(或多个)未来,该未来将在单独的线程上执行,阻塞直到它们都使用Future.get()完成,然后根据结果完成其他任务

  2. # 2 楼答案

    使用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
        }
    }