Java多线程等待任务结束

时间:2018-09-25 13:02:31

标签: java multithreading task executor

我想请您提供此代码帮助。我有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
    }   
}

1 个答案:

答案 0 :(得分:2)

您已经具有ExecutorService。这是一个很大的优势,因为

  

执行器,提供管理终止的方法和方法   可以生成未来来跟踪一个或多个进度   异步任务。

来自java Docs

对于未来,您可以做到

  

提供了一些方法来检查计算是否完成,等待   完成操作,并检索计算结果。的   仅当计算具有以下内容时,才可以使用get方法检索结果   已完成,如有必要,请阻塞直到准备就绪。

来自JavaDocs

借助此功能,您可以做出想要的东西。希望对您有所帮助,您可以找到很多有关此的教程。