簡體   English   中英

Java Timer.schedule任務根本不運行

[英]Java Timer.schedule task doesn't run at all

我有這個:

import java.util.Timer;
import java.util.TimerTask;

    public class useTimerTask {
        public static void main(String[] args){
            Timer timer = new Timer(true);
            timer.schedule(new TimerTask() {
                public void run() {
                    System.out.println("abc");
                }
            }, 200000 , 1000);
        }
    }

我預計在運行此程序后,屏幕上會有定期輸出。 但是當我在intelliJ中運行它時,似乎它立即完成而沒有打印任何東西。

發生了什么? 怎么解決?

首先,您需要從Timer的構造函數中刪除該參數。 通過傳遞true您指定該線程是“deamon”:守護程序線程不會阻止JVM在所有非守護程序線程完成時退出。

第二件事是你將延遲參數設置為200分鍾。 這意味着您必須在程序開始重復println之前等待200分鍾。 以下是工作版本:

       Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("abc");
            }
        }, 100 , 1000);

如果將Timer設置為deamon,JVM將看到沒有活動線程,並且在調度計時器的指令完成時停止終止程序。 但是如果從Timer構造函數中刪除參數“true”,它將作為活動線程顯示,這意味着程序在該計時器完成其工作之前不會停止。

下面的代碼顯示了這種情況 計時器將工作10秒,因為你睡覺主線程和計時器(deamon)將工作,直到這個睡眠結束。

    Timer timer = new Timer(true);
    timer.schedule(new TimerTask() {
        public void run() {
            System.out.println("abc");
        }
    }, 100 , 1000);

    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM