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