Как работает Java Thread Pool? - PullRequest
0 голосов
/ 12 октября 2018

Я работаю над проектом 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 );

Пожалуйста, предложите решение?Я пропустил некоторую конфигурацию или это не правильный пул потоков для моего сценария?Тогда какой пул потоков будет работать правильно в этом случае?

Действительно признателен за вашу помощь.

С уважением, Кришан

...