Timer
私はとを使用してすべての時間ベースのタスクを実行することを好みますTimerTask
。次のコードを確認してください。おそらくこれはあなたにとって役立つはずです。
Timer t =new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
//The task you want to perform after the timeout period
}
}, TIMEOUT);
編集
私はあなたの問題を解決しようとしています。@amicnghによって記述されたコードをベースコードとして使用しており、いくつかの変更を加えています。しばらくするとTIMEOUT
、実行中のスレッドを閉じたいと思います。次のコードが正常に実行され、次の説明が表示されることを確認してください。
public class ThreadTest {
public static void main(String[] args) throws InterruptedException {
final long TIMEOUT=100;
final long startJoin = System.currentTimeMillis();
Thread runner = new Thread(new Runnable() {
long stopJoin;
@Override
public void run() {
try{
for(;;){
System.out.println("running ");
stopJoin = System.currentTimeMillis();
if ((stopJoin - startJoin) >= TIMEOUT){
throw new Exception();
}
}
}
catch (Exception e) {
// TODO: handle exception
}
}
// some actions here
});
runner.start();
synchronized (ThreadTest.class) {
ThreadTest.class.wait(TIMEOUT);
}
/*if ((stopJoin - startJoin) >= TIMEOUT)
try {
throw new Exception("Timeout when reading the response from process");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
System.out.println("Running Thread");
}
}
スレッドAPIの説明によると、destroy
またはstop
(したがって、これらのメソッドは両方とも非推奨になっています)安全ではなく、スレッドを停止する方法の1つは、例外をスローすることです。runner
したがって、スレッド内のタイムアウトをチェックしています。synchronized
ここで、メインスレッドを待機させることについては、スレッドへのアクセスを同期するために使用する2行のコードによって実行されます。
このコードと説明があなたの問題を解決することを願っています。