两个线程开始。我想在2秒内中断第一个线程。 你能帮我理解我的计时器错误吗?它似乎没有打断线程。
class ThreadTask extends TimerTask {
@Override
public void run() {
firstThread.interrupt();
System.out.println("firstThread has been terminated.");
} // run
} // class ThreadTask
Timer timer = new Timer();
ThreadTask task = new ThreadTask();
timer.schedule(task, new Date().getTime() + 3000);
答案 0 :(得分:2)
似乎使用方法Timer.schedule时出错。
您正在使用:
public void schedule(TimerTask任务,长延迟)计划 在指定的延迟后执行的指定任务。参数: 任务 - 要安排的任务。延迟 - 任务前的毫秒延迟 将被执行。
如果你花费当前时间+ 2秒,那么线程将停止工作〜44年。
使用:
timer.schedule(task, 3000);
答案 1 :(得分:0)
中断线程的示例代码。
在Thread.currentThread().isInterrupted()
方法
Thread.run()
Timer
必须从Thread.run()
方法启动,如果您想在开始执行3秒后中断它。
import java.util.Timer;
import java.util.TimerTask;
public class ThreadTimer implements Runnable {
/**
* @param args
*/
public static void main(String[] args) {
new Thread(new ThreadTimer()).start();
}
@Override
public void run() {
Timer timer = new Timer();
ThreadTask task = new ThreadTask(Thread.currentThread());
timer.schedule(task, 3000);
while (true) {
if (Thread.currentThread().isInterrupted()) {
break;
}
System.out.println(Math.random() * 1000);
// do whatever you want to do here
}
}
}
class ThreadTask extends TimerTask {
private Thread thread;
public ThreadTask(Thread thread) {
this.thread = thread;
}
@Override
public void run() {
thread.interrupt();
System.out.println("Thread has been terminated.");
} // run
} // class ThreadTask
如果上述代码不符合您的要求,请使用ExecutorService.awaitTermination()
作为执行此操作的最佳选择
这是 Sample Code