java請求超時
㈠ java:這兩種設置超時時間有什麼區別
以下來自官方文檔,學習編程只要看文檔就可以了
setSoTimeout
public void setSoTimeout(int timeout)
throws SocketException
啟用/禁用帶有指定超時值的 SO_TIMEOUT,以毫秒為單位。將此選項設為非零的超時值時,在與此 Socket 關聯的 InputStream 上調用
read() 將只阻塞此時間長度。如果超過超時值,將引發 java.net.SocketTimeoutException,雖然 Socket
仍舊有效。選項必須在進入阻塞操作前被啟用才能生效。超時值必須是 > 0 的數。超時值為 0 被解釋為無窮大超時值。
參數:
timeout - 指定的以毫秒為單位的超時值。
拋出:
SocketException -
如果底層協議出現錯誤,例如 TCP 錯誤。
connect
public void connect(SocketAddress endpoint,
int timeout)
throws IOException
將此套接字連接到伺服器,並指定一個超時值。超時值零被解釋為無限超時。在建立連接或者發生錯誤之前,連接一直處於阻塞狀態。
參數:
endpoint - SocketAddress
timeout - 要使用的超時值(以毫秒為單位)。
拋出:
IOException - 如果在連接期間發生錯誤
SocketTimeoutException
- 如果在連接之前超時期滿
IllegalBlockingModeException
- 如果此套接字具有關聯的通道並且該通道處於非阻塞模式
IllegalArgumentException
- 如果端點為 null 或者此套接字不支持 SocketAddress 子類
㈡ java客戶端調用webservice 超時問題
用多線程來處理類似問題
將調用這個WebService的程序放到一個獨立線程A中,再創建另一個線程B用來計時,線程A和線程B共享一個變數responseOK。
在線程A中調用WebService之前啟動線程B,成功返回後設定responseOK=true。
線程B啟動後計時,如果responseOK==true則停止計時,如果計時超過20秒,則終止線程A並返回錯誤信息。
似乎webService調用的時候如果服務端超時應該會有異常觸發的,截獲此異常即可。
