java超時
① java:連接請求超時是什麼意思超時就不再請求了
連接請求超時 是在請求資料庫或者請求網頁時 防止應用一直佔用資源的一個解決辦法。
連接請求超時,一般是網路中斷、阻塞等由於網路的問題造成的臨時原因。
一般情況下連接超時之後,就進行再次請求,如果重復三次之後仍然是超時 那就不再請求了。
② java wait超時處理
必須另起線程.因為wait的時候就已經阻塞了!
③ java的timer類如何判斷程序超時呢
參照如下的:
Timer類是用來執行任務的類,它接受一個TimerTask做參數
TimerTask是個抽象類,他擴展了Object並實現了Runnable介面,因此你必須在自己的Task中實現publicvoid run()方法。這也就是我們需要執行的具體任務。
Timer有兩種執行任務的模式,最常用的是schele,它可以以兩種方式執行任務:1:在某個時間(Data),2:在某個固定的時間之後(intdelay).這兩種方式都可以指定任務執行的頻率
我們指定一個線程A,調用對象B.wait(timeout),線程A就會阻塞,直到timeout到了,B醒來會使A繼續執行。
其實Timer類是為多任務定時設計的,在實現裡面,B是一個任務隊列(實現上就是一個array),維護著所有使用當前Timer定時的任務,它們可是一堆貨真價實的線程實例。每次線程A都取隊列中距離當前時間最近的的定時任務,跟當前時間比較,然後wait(timeout)這段時間。線程喚醒的時刻也是隊列中這個定時任務運行的時刻。然後線程繼續取下一個定時任務,繼續wait(timeout)。從這里我們能看出來,每次定時都有額外的時間開銷,比如要維護隊列等,所以Java的Timer類不保證實時。
Timer中最主要由三個部分組成:
任務TimerTask 、 任務隊列: TaskQueue queue 和 任務調試者:TimerThreadthread
Timer對任務的調度是基於絕對時間的。
所有的TimerTask只有一個線程TimerThread來執行,因此同一時刻只有一個TimerTask在執行。
任何一個TimerTask的執行異常都會導致Timer終止所有任務。
由於基於絕對時間並且是單線程執行,因此在多個任務調度時,長時間執行的任務被執行後有可能導致短時間任務快速在短時間內被執行多次或者乾脆丟棄多個任務。
由於Timer/TimerTask有這些特點(缺陷),因此這就導致了需要一個更加完善的任務調度框架來解決這些問題。
默認情況下,只要一個程序的timer線程在運行,那麼這個程序就會保持運行。當然,你可以通過以下四種方法終止一個timer線程:
調用timer的cancle方法。你可以從程序的任何地方調用此方法,甚至在一個timertask的run方法里。
讓timer線程成為一個daemon線程(可以在創建timer時使用newTimer(true)達到這個目地),這樣當程序只有daemon線程的時候,它就會自動終止運行。
當timer相關的所有task執行完畢以後,刪除所有此timer對象的引用(置成null),這樣timer線程也會終止。
調用System.exit方法,使整個程序(所有線程)終止。
④ java如何捕捉請求超時引起的錯誤
Socket的|?
connect(SocketAddress endpoint, int timeout)
connect方法中timeout可以設置超時時間,如果時間內沒有連接則 報超時異常
你只需要在相應的catch塊里做處理即可
⑤ java項目頁面為什麼會超時
session超時?因為客戶端沒有發起請求。時間超過默認session超時時間
⑥ 請問如何讓java執行某條語句超時時跳過該語句(或拋出異常)
放到線程里(比如:Thread)執行
然後線程.join(2000);等待2秒,捕捉中斷異常即可,到了兩秒會觸發中斷異常,然後繼續往下走
⑦ Java中如何實現線程的超時中斷
如果你是要在子線程超時後直接關閉的話可以這樣:
exec=Executors.newFixedThreadPool(1);
Callable<String> call = new Callable<String>() {
public String call() throws Exception {
//開始操作
//TimeTaskTest.star(null);
return "線程執行完成";
}
};
Future<String> future = exec.submit(call);
//設置為30分鍾超時
future.get(1000*60*time , TimeUnit.MILLISECONDS);
=========================================
如果你是在進行其他操作的話那就比較麻煩了,目前我想到的是在子線程中一直訪問某個變數,超時時守護線程改變這個值,然後子線程讀到後退出,不過這個有個問題,就是當子線程卡死在某個環節時完全無用
⑧ java題目運行超時是怎麼回事
首先確保沒有加package,類名稱為Main。
為了運行效率,請使用
[java]view plain
因為pat系統對scanner支持不友好且運行時間長。BufferedReaderbf=newBufferedReader(newInputStreamReader(System.in));
請在使用完bufferedreader之後立刻使用close();方法關閉,否則可能會發生內存泄漏(關閉的越早越好)。
【重要】請不要隨便import沒有用到的包,親測若是導入了java.util.Scanner可是你沒有用到scanner,就會返回非零。
一般對於100ms時間限制的題目,基本ac不了,哪怕優化得再好。因為很多乙級題目運行時長(該死的jvm啟動)在100ms上下,運氣好ac的多,運氣差全超時!
200ms以上的題目,若是運行超時,那就請不要用暴力破解。
還是超時的話,建議換語言。官方說明:選擇合適的語言也是一種技巧,所以不給你java放寬時間限制!
二、對於運行超時
⑨ 怎麼做java超時處理方法
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.concurrent.Callable;
importjava.util.concurrent.Future;
importjava.util.concurrent.FutureTask;
importjava.util.concurrent.TimeUnit;
classTest26{
publicstaticvoidmain(String[]args){
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
System.out.println("開始:"+sdf.format(newDate()));
Future<String>future=newFutureTask<String>(newCallable<String>(){
publicStringcall()throwsException{
test();
returnnull;
}
});
try{
future.get(10,TimeUnit.SECONDS);//執行10秒結束
}catch(Exceptione){
}
System.out.println("結束:"+sdf.format(newDate()));
}
publicstaticvoidtest(){
inti=1;
while(true){
if(i==0){
break;
}
}
}
}
⑩ 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 子類