㈠ android java怎麼設置超時時間
第一,ConnectionPoolTimeout:
定義了從ConnectionManager管理的連接池中取出連接的超時時間。
出錯會拋出
第二,ConnectionTimeout:
定義了通過網路與伺服器建立連接的超時時間,Httpclient包中通過一個非同步線程去創建與伺服器的socket連接,這就是該socket連接的超時時間。檔枯賣
當連接行逗HTTP伺服器或者等待HttpConnectionManager管理的一個有效連接超敗亮時出錯會拋出ConnectionTimeoutException
第三,SocketTimeout:
這定義了Socket讀數據的超時時間,即從伺服器獲取響應數據需要等待的時間。
當讀取或者接收Socket超時會拋出SocketTimeoutException
㈡ 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 線程池中正在運行的線程 如何設置超時時間 ps:如何設置一個線程最長的運行時間。
你可以設置一個計時器,然後把線程對象給它,讓計時器在恰當時候把線程對象終止
㈣ 關於Java線程超時退出的問題.
你在捕捉到復的異常中,調用一下線製程的interrupt()方法就可以對線程進行中斷,當然,你的線程中的run方法中不能catch了interrupt()異常並且忽視這個異常。
比如在出現異常的地方:
threadA.interrupt();
而threadA的run方法中:
public void run() {
while(true) {
try {
....
} catch (InterruptedException) {
break; //這樣是可以的,如果沒有break或者修改為continue則不行
}
}
}
也可以將這個放在while循環之外。
public void run() {
try {
while(true) {
....
}
} catch (InterruptedException) {
....
}
}
㈤ java線程 如何監控用戶操作超時
給一個我自己的絲路:
用戶開始操作時,session記錄狀態。並開啟定時器,延遲時間就是你允許用戶操作殲敏的時間。定悉改鄭時器執行的代碼,就是用戶超時後,你要做的事情。
用戶在時間范圍睜頌內操作完成,肯定會給伺服器發送完成信息,此時移除定時器即可。
㈥ java使用線程操作,等待線程後續時間過長報超時異常,如何操作使線程推出數據後即算線程操作結束
java中使用來用線程式控制制Task任務,自啟動下面的線程就可以了,new Thread(new Task()).start() ;public class
Task implements Runnable {//新建一個任務
private TextArea textArea;
public Task(TextArea textArea){
this.textArea = textArea;
}
public void run() {
while (true) {
this.textArea.setText("這里設置: 輸出的一段文字");
try {
Thread.sleep(500); // 這里設置:隔多長時間
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
㈦ java線程池裡的線程,怎麼設置Timeout
應該是復沒有這個功制能的,因為線程池裡面的線程實際上是復用的,即執行完一個Job以後會從Quenue(任務隊列)裡面取新的JOB。
如果有這樣的需求可以:
1)控制JOB的執行時間不能太長,否則可能會造成阻塞;
2)在JOB的實現(run方法)裡面做相應的控制;
3)如果JOB有長時間和短時間兩種模式,可以考慮放在兩個線程池中,避免長時間的任務阻塞短時間的任務;
4)也可以控制等待隊列的任務個數,但是Executors默認的Factory方法是沒有這個參數的,需要直接new ThreadPoolExecutor
㈧ 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介面怎麼設置timeout
在Java中,如果需要設定代碼執行的最長時間,即超時,可以用Java線程池ExecutorService類配合Future介面來實現。 Future介面是Java標准API的一部分,在java.util.concurrent包中。Future介面是Java線程Future模式的實現,可以來進行非同步計算。
Future模式可以這樣來描述:我有一個任務,提交給了Future,Future替我完成這個任務。期間我自己可以去做任何想做的事情。一段時間之後,我就便可以從Future那兒取出結果。就相當於下了一張訂貨單,一段時間後可以拿著提訂單來提貨,這期間可以干別的任何事情。其中Future 介面就是訂貨單,真正處理訂單的是Executor類,它根據Future介面的要求來生產產品。
Future介面提供方法來檢測任務是否被執行完,等待任務執行完獲得結果,也可以設置任務執行的超時時間。這個設置超時的方法就是實現Java程序執行超時的關鍵。
㈩ java 多線程如何讓程序運行一定時間後停止
你說的應該不是sleep吧。呵呵,
這么簡單的話,春隱就沒必要在這里問了。
我猜測呢,你是要在多線程計時任務
Task線程裡面有個while循環?
那麼你需要一個TimerTask 來控制這個線程,也就是計時線程。
那麼這個計時線程,有兩種方法~
第一種,比較不講究的方法,也就是,對結果處理不好的方式,類似叢攜於過時方法的stop,就是把你的Task線程在TimerTask裡面啟動。
TimerTask裡面類似於
while(true){
Task.start();
Date date = new Date();
while(true){
計算時間差,如果時間差大於超時時間,則break
}
}
而在Task線程中,需要加上一行代碼
this.setDeamon(true);
將這個task任務設置成後台線程。
因為是TimerTask啟動的這個後台任務線程, 一旦超時,那麼,這個後台線程Task將會被強制shutdown 。
這種方式適用於不怎麼嚴格的線程要求。
還有一種呢,就是比較嚴格,對後台處理要求很高的那種。
就是兩個線程中需要有共享的變數,將結果,運行狀態,都要共享,當TimerTask發現超時的時候,會判斷Task線程的處理結果。以及運行狀態,而做出相應的處理。
你問的問題比較寬泛。滲森伏所以,我只能大致的把思路給介紹一下。
如果,能牽扯到實際的問題,那樣就容易判斷用那種方式的線程超時機制比較好了。呵呵
最後,節日愉快~~