我有一個java程序,產生4線程。在每個線程中,我有多個套接字超時。但是,這些超時似乎不受尊重,即readLine()
功能可能會阻塞較長時間。在Java中有多個線程不遵守套接字超時?
我想要以下行爲:如果我將套接字超時設置爲300毫秒,那麼我希望readLine()
函數在調用readLine()
(即底層選擇調用)後的300毫秒內返回,無論如何。我知道OS調度程序會在進行處理器共享時將線程置於睡眠狀態,但是Java中是否有任何方式來強制線程始終被喚醒以確保這種行爲?或者,這是不是在多線程編程時想的正確方法?理想情況下,由於我生成了4個線程並在6核機器上運行,因此每個線程都應該能夠獲得自己的CPU並行運行,並遵守選擇的超時時間......但這可能太多了以期望...
PS:我實際上確實使用Thread.interrupt()來確保我的每個線程在一定的時間內退出(我檢查主線程中的時間,並中斷子線程,如果它的太長了)。在我的每個線程中,我連接到(不同的)服務器,發出請求並等待響應。我不知道答覆會持續多久。所以我一直在調用readLine()
方法,直到它用SocketTimeoutException
超時。我強制執行300 ms的超時,因爲我希望服務器在此時間內開始響應。我想強制執行此超時的原因是服務器以廣播方式運行,並將響應發送給所有客戶端的單個客戶端的請求。所以如果我沒有超時,我會繼續獲取數據來回應其他客戶的請求。
超過300毫秒的線程是否超時後返回的線程? – SimonJ 2011-05-03 00:12:52