Я бы хотел попросить вас помочь с этим кодом.У меня есть 10 экземпляров GameGeneratorController.Каждый экземпляр использует метод StartTaskCalculation (), который я хотел бы создать максимум 3 задачи (для типа 1-2-3).Затем метод AddTask добавляет задачу исполнителю, который может обрабатывать 4 потока одновременно.
И проблема: мне нужно проверить, какой расчет был отправлен исполнителю.Например, когда я вызываю AddTask (1), я хочу дождаться завершения вычисления (1) и только затем снова вызвать AddTask (1).
Теперь я могу вызывать StartTaskCalculation () 100 раз подряд, и к исполнителю будет добавлено 100 задач.
Я бы хотел, чтобы в исполнителе было максимум 30 задач (10GameControllers * 3 задачи)в то же время.Я пытался использовать Future.get () для получения результата, но это заблокирует другие потоки.
Мне нужно, чтобы эти 4 потока работали одновременно, и когда один из них будет завершен, дайте мне обратный вызов и дайте мне знать:«Для этого GameGeneratorController это вычисление (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
}
}