スレッドタイムアウトの解放
7969 ワード
スレッドプールのスレッドリソースが消費され、スレッドが解放されない場合は、深刻な問題に違いありません.考え方:1.新FixedThreadPoolのFutureクラスgetメソッドでは、インタフェースgetが所定の時間に完了しないとthrowsタイムアウト異常を設定できます.
2.モニタスレッドを自分で書きます.demoは以下の通りです.
/**
* Waits if necessary for at most the given time for the computation
* to complete, and then retrieves its result, if available.
*
* @param timeout the maximum time to wait
* @param unit the time unit of the timeout argument
* @return the computed result
* @throws CancellationException if the computation was cancelled
* @throws ExecutionException if the computation threw an
* exception
* @throws InterruptedException if the current thread was interrupted
* while waiting
* @throws TimeoutException if the wait timed out
*/
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
2.モニタスレッドを自分で書きます.demoは以下の通りです.
package filesearch;
public class StopTest {
public static void main(String[] args) {
int i = 1;
/**
*
* ---args---
*/
WorkThread ct = new StopTest().new WorkThread("---args---");
ct.start();
/**
* , :
* 1) , stop, break,
* 2) ,while ,
*/
while(ct.isAlive()){
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(""+i);
if(i>10){
ct.stop();
break;
}
}
}
class WorkThread extends Thread {
String str ;
WorkThread(String str1){str=str1;}
public void run() {
try {
System.out.println("arg:"+str);
System.out.println("begin");
Thread.sleep(8000);
System.out.println("end");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}