簡體   English   中英

Java多線程等待任務結束

[英]Java Multithreading Wait for Task end

我想請您幫助這段代碼。 我有10個GameGeneratorController實例。 每個實例都使用StartTaskCalculation()方法,我想最多創建3個任務(針對1-2-3類型)。 然后,方法AddTask將任務添加到執行程序,該執行程序可以同時處理4個線程。

問題是:我需要檢查一下,什么計算發送給了執行者。 例如,當我調用AddTask(1)時,我想等到Calculation(1)完成,然后才再次調用AddTask(1)。

現在,我可以連續調用StartTaskCalculation()100次,並將100個任務添加到執行程序中。

我想同時在執行程序中最多包含30個任務(10GameControllers * 3個任務)。 我試圖使用Future.get()獲得結果,但這將阻止其他線程。

我需要這4個線程同時運行,當一個線程完成時,給我一些回調,讓我知道:“對於此GameGeneratorController,此Calculation(1)已完成”

public class Main {   
     static ExecutorService executor = Executors.newFixedThreadPool(4);      

     public static void main(String[] args) {

     GameGeneratorControllers[] controllers;
     for(1 to 10)   {
     controllers.add(new GameGeneratorControllers)
                    }
}



public class GameGeneratorController {

    public GameGeneratorController(int gameId, ExecutorService executor  )
    {
        this.gameId = gameId;      
        this.executor = executor;
    }
    ExecutorService executor;
    int gameId;


    public void StartTaskCalculation(){
        int Type = some logic to pick up from 1 , 2 or 3
        AddTask(Type);
    }

     public void AddTask(int taskType)
    {
        executor.execute(Calculation(int taskType));
    }

    void Calculation(int i){
        //some calculation here
    }   
}

您已經有一個ExecutorService。 這是一個很大的優勢,因為

一個執行程序,提供用於管理終止的方法以及可以生成用於跟蹤一個或多個異步任務進度的Future的方法。

Java Docs

有了未來,您可以做到

提供了一些方法來檢查計算是否完成,等待其完成以及檢索計算結果。 只有在計算完成后才可以使用get方法檢索結果,必要時將其阻塞,直到准備就緒為止。

JavaDocs

有了這個你就可以做你想要的。 希望對您有所幫助,您可以找到很多有關此的教程。

暫無
暫無

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

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