我正在研究一个IoT项目,其中设备将数据发送到我们的Java应用程序,称为网关适配器(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条消息进行负载测试时,我可以在日志文件中看到消息“ EnteringallocateThread”和“ Entering HelperThread” 5000次,但是我的run方法仅执行1000次就意味着消息“ Entering run”在日志文件中仅存在1000次。由于这一原因,其他4000条消息无法处理。
这是预期的行为“ newWorkStealingPool”线程池吗?它只会执行等于其构造函数中提供的数字的任务吗?例如。 Executors.newWorkStealingPool( 1000 );
请提出解决方案? 我是否缺少某些配置,或者它不是适用于我的方案的正确线程池?那么在这种情况下哪个线程池将正常工作?
非常感谢您的帮助。
关于, 克里山