1. 程式人生 > >Exception: java.util.concurrent.TimeoutException

Exception: java.util.concurrent.TimeoutException

今天接手一個“寫的很複雜”的程式碼。多執行緒請求,有時候就會丟失返回值。

程式是這樣設定的,請求執行後自動執行重寫的complete()方法,把數值寫入全域性變數map中,之後對map進行操作。

其中的程式碼很複雜,就不貼上來了。map中偶爾會缺失資料,但不報錯。

後來我把complete()方法提取到主執行緒執行後,occured TimeoutException。

第一時間想到的是client設定timeout時間小了,結果真的是隻有5s,調高了之後沒有再出現問題。

connectionRequestTimeout:指從連線池獲取連線的timeout

connetionTimeout:指客戶端和伺服器建立連線的timeout,

 
就是http請求的三個階段,一:建立連線;二:資料傳送;三,斷開連線。超時後會ConnectionTimeOutException

socketTimeout:指客戶端從伺服器讀取資料的timeout,超出後會丟擲SocketTimeOutException

轉自http://blog.csdn.net/wangjin890620/article/details/54630219


RequestConfig config = RequestConfig.custom().setConnectionRequestTimeout(120 * 1000)
.setSocketTimeout(120 * 1000).setConnectTimeout(120 * 1000).build();

個人認為是connectionRequestTimeout,但是保險起見把所有都調高了,沒有出現問題。