如何做出一系列已經與invokeAll
停止執行超時線程。
背景:
我有callables
我想等完成的列表。但是,如果他們沒有在規定時間內完成(比如說一秒),我想取消它們。這似乎很容易與
executor.invokeAll(callables, 1000l, TimeUnit.MILLISECONDS);
所以一秒鐘後,它會超時很好,我可以繼續我的一天。但是在後臺,線程仍然處於活動狀態,可能會執行一些代碼段。本質上他們不會中斷,我不想發生 - 我希望線程停止執行。
有沒有什麼方法可以在invokeAll
超時後使用返回的期貨清單來停止線程?
該文檔說,返回的任務未完成時將被取消。 http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#invokeAll%28java.util.Collection,%20long,%20java.util.concurrent.TimeUnit%29 – pshirishreddy
我認爲他們被取消了,但他們仍然活着,甚至在'invokeAll'已經停止阻止後可以繼續記錄。 – Deepak
線程在做什麼?有線程沒有響應中斷的各種可能的原因(阻塞IO,代碼吃掉中斷,代碼忽略中斷,等待進入同步塊...) – bowmore