Я работаю над проектом IoT, где устройства отправляют данные в наше Java-приложение под названием Gateway Adapter (GA).В Java я использую Пул потоков, чтобы начать новый поток для каждого сообщения, которое мы получили от устройств.
У меня есть следующий код для Распределителя потоков и Запускаемого потока.
public class ThreadAllocator {
/** The thread pool. */
private ExecutorService executorService = Executors.newWorkStealingPool(1000);
public void allocateThread(IoSession session, String message) {
LOGGER.info("Entering allocateThread");
executorService.execute(new HelperThread(null,session, message));
}
}
public class HelperThread implements Runnable {
private String message;
public HelperThread(String message) {
LOGGER.info("Entering HelperThread");
this.message = message;
}
public void run() {
LOGGER.info("Entering run");
// Process Message
}
}
С кодом выше, когдаЯ провел нагрузочное тестирование, отправив около 5000 сообщений, я мог видеть сообщения «Ввод allocateThread» и «Ввод HelperThread» 5000 раз в файле журнала, но мой метод выполнения, выполненный только 1000 раз, означает, что сообщение «Ввод выполнения» было в файле журнала только 1000раз.Из-за чего другие 4000 сообщений не могут быть обработаны.
Является ли ожидаемое поведение пула потоков newWorkStealingPool?Будет ли он выполнять только задачи, равные числу, указанному в его конструкторе?Например, Executors.newWorkStealingPool ( 1000 );
Пожалуйста, предложите решение?Я пропустил некоторую конфигурацию или это не правильный пул потоков для моего сценария?Тогда какой пул потоков будет работать правильно в этом случае?
Действительно признателен за вашу помощь.
С уважением, Кришан