繁体   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