java – 為什麼ExecutorService介面不實現AutoCloseable?
沒有線上程執行程式上呼叫shutdown()將導致永遠不會終止應用程式.關閉ExecutorService的最佳做法是:
ExecutorService service = null; try { service = Executors.newSingleThreadExecutor(); // Add tasks to thread executor … } finally { if(service != null) service.shutdown(); }
由於Java知道try-with-resources概念,如果我們能做到這一點,那不是很好嗎?
try (service = Executors.newSingleThreadExecutor()) { // Add tasks to thread executor … }
實際上有兩個關機相關的方法;基於簡單的事實,即關閉服務的兩種方式都是有道理的.
那麼你怎麼會自動關閉一個服務呢?以一貫的方式為大家工作?
所以,在我眼中的合理解釋:你不能使ExecutorService成為一個AutoClosable,因為該服務沒有像關閉一樣的操作;但是兩個!
如果您認為您可以善用這種自動關閉服務,則使用“委託”來編寫自己的實施將是5分鐘的事情!或者大概10分鐘,因為你會建立一個呼叫shutdown()作為close操作的版本;而另一個則執行shutdownNow().
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/41393417/why-does-the-executorservice-interface-not-implement-autocloseable