2012-09-27 18 views
1

如果您關閉該啓動一個URLConnection,或一個BufferedReader,無需斷開的URLConnection或關閉的BufferedReader執行人的服務,會發生什麼情況,是否有記憶力減退,並將它慢下來的CPU?關機執行服務的Java

回答

3

關閉一個Executor不會終止已經忙線。那些將運行到完成(或使用中斷有序關閉)。所以所有的資源都會被正確地清理掉(除非你錯過了某個地方的finally塊)。您的責任是讓您的runnable正確處理InterruptedException(和其他異常)。

+2

旁註:'shutdown'不會嘗試中斷;你可以使用* shutdown *的'shutdownNow'。此外,請查看通過java.util.concurrent提供的一些實用程序,以更好地控制與任務的通信。 – oldrinb

+0

還有一個'awaitTermination'方法,該方法將阻塞,直到所有線程都終止。它也可以讓你設置一個超時間隔。 – mzzzzb

1

每個URLConnection類具有預定義的超時。您可以指定超時使用

connection.setReadTimeout(2000); 
    connection.setConnectTimeout(2000); 

無法保證這將起作用,因爲Java文檔本身不提供保證。

URLConnection#setConnectTimeout

URLConnection#setReadTimeout

一些非標準的此方法的實現忽略指定的超時時間。要查看讀取超時設置,請調用getReadTimeout()。

因此,除非您指定了適當的超時時間,否則中斷將不起作用。

ExecutorService#shutdownNow()通過中斷線程提供了一種立即關閉的方式,但由於這些線程不能被中斷,因此不會提供額外的好處。

它只提供當線程已經確定了其中斷策略並執行可中斷的操作好處。