我在Java中实现了一个TimerTask,我需要在一段时间后停止线程:
....
timer = new Timer(); // At this line a new Thread will be created
TimerTask timerTask = new TimerTask() {
int tweetCounter = 0;
String message;
@Override
public void run() {
try {
while ((message = reader.readLine()) != null && (tweetCounter < 100)) {
bucket.add(message);
tweetCounter++;
out.println("Number of messages: " + tweetCounter);
out.println("Nano Time: " + System.nanoTime());
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
timer.schedule(timerTask, 30000);
......
此时我尝试:
timerTask.cancel();
timer.cancel();
timer.purge();
之后没有任何反应,程序永远不会退出。 如何停止TimerTask线程?
答案 0 :(得分:1)
timer.cancel();
timer.purge();
会奏效。
int java.util.Timer.purge()
从任务队列中删除所有已取消的任务。如果没有别的 关于任务的参考,然后在这个电话后他们可以自由 垃圾收集。
返回:从任务中删除的已取消任务的数量 队列中。
答案 1 :(得分:0)
Timer timer = new Timer();
TimerTask tt = new TimerTask(){
public void run(){
Calendar cal = Calendar.getInstance(); //this is the method you should use, not the Date(), because it is desperated.
int hour = cal.get(Calendar.HOUR_OF_DAY);//get the hour number of the day, from 0 to 23
if(hour ==9){
try{
listAllUsers();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println("doing the scheduled task");
}
else{
System.out.println(" Todays task already done");
}
}
};
timer.schedule(tt, 0, 10000);// delay the task 10 seconds, and then run task after evey one minute
尝试为我工作