0
我的要求是每30秒轮询一次MongoDB以查找集合中的任何数据更改。我已经使用Java CompletableFuture.runAsync作为下面捕获的代码实现此功能。我有测试运行一天的程序,它似乎工作正常。Java CompletableFuture.runAsync回复......任何潜在风险?
我的问题是:
- 会不会有OOM“堆栈溢出”异常的任何潜在风险,如果我继续运行很长一段时间?
我的线程池大小为3,从日志文件中我发现前几个2运行使用pool-1-thread-1和pool-1-thread-2,从第三次运行开始,它不断重用pool-1-thread-3一段时间,然后在一段时间内重新使用pool-1-thread-1/pool-1-thread-2 ......会有什么潜在的问题或是否正常?
private static ExecutorService executor = Executors.newFixedThreadPool(3); private void watch(){ CompletableFuture<Void> watchForLeadershipChange = CompletableFuture.runAsync(() -> pollForChanges(), executor); } private void pollForChanges() { //Query MongoDB collection and do some logic TimeUnit.SECONDS.sleep(30); watch(); }
为什么不'ScheduledExecutorService'?或者只是一个'while()'循环? –
至于被不同poolthreads拾取的任务:是的,这是正常的。 – Fildor