簡體   English   中英

Java線程:如何同時執行一條語句

[英]Java Thread: How to execute a statement simultaneously

考慮到我有一個運行方法如下,我試圖為MyThread創建四個線程。 語句1到3可以同時在線程中運行,也可以不同地運行。 但是我希望語句4由線程同時執行。 我可以在語句4之前合並所有線程並由所有線程同時執行語句4嗎?

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

}

使用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的Future實現。 您可以定義一個(或多個)Future,它們將在單獨的線程上執行,阻塞,直到它們全部由Future.get()完成,然后根據結果完成其他任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM