如何在Java中停止TimerTask

时间:2015-05-14 11:04:07

标签: java timer timertask

我在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线程?

2 个答案:

答案 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

尝试为我工作