小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

如何暫停/重啟(Pause/Restart)一個TimerTask而不是銷毀/新建(Cancel/Renew)一個TimerTask

 旭龍 2012-09-18
直接在TimerTask中使用cancel()方法將其暫停后,
似乎無法直接再讓它重新啟動起來(直接在Timer中schedule這個已經(jīng)cancel的timertask會拋出IllegalStateException異常)。

實際需求為:
1. TimerTask中的run方法可以控制該TimerTask進(jìn)入暫停狀態(tài)
2. TimerTask進(jìn)入暫停狀態(tài)后,可以在其他類中調(diào)用某方法重新激活該TimerTask,使其進(jìn)入定期運行狀態(tài)


#1樓 得分:9回復(fù)于:2009-02-25 10:06:38
樓主可以將Timer換成多線程的啊....
在使用多線程時,使用一個標(biāo)志來決定是否運行....


#3樓 得分:100回復(fù)于:2009-02-25 10:33:21
Java code
import java.util.Timer;
import java.util.TimerTask;


public class Test1 {
    public static void main(String[] args) {
        final MyTimerTask task = new MyTimerTask();
        new Timer().scheduleAtFixedRate(task, 0, 1000);

        Thread thread = new Thread() {
            public void run() {
                while(true) {
                    try {
                        Thread.sleep(1500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    synchronized (task) {
                        task.condition = true;
                        System.out.println("notify...");
                        task.notifyAll();
                    }
                }



            };
        };
        thread.start();
    }
}

class MyTimerTask extends TimerTask{
    public volatile boolean condition = false;

    public void run() {
        synchronized (this) {
            while(!condition) {
                System.out.println("Waiting...");
                try {
                    wait();
                } catch (InterruptedException e) {
                    Thread.interrupted();
                }

            }

        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Continue task...Done.");
        condition = false;
    }
}

#6樓 得分:0回復(fù)于:2009-02-25 14:38:15
請問MT502  (3#)

如下這段代碼中:
Java code
synchronized (task) { task.condition = true; System.out.println("notify..."); task.notifyAll(); }


為什么要將task加到同步塊中?
這個synchronized的具體作用是什么?
我試著去掉同步,結(jié)果會拋出“java.lang.IllegalMonitorStateException”異常。


#7樓 得分:40回復(fù)于:2009-02-25 14:41:41
引用 6 樓 talent_marquis 的回復(fù):
請問MT502 

如下這段代碼中: 

Java code
synchronized (task) {
task.condition = true;
System.out.println("notify...");
task.notifyAll();
}




為什么要將task加到同步塊中? 
這個synchronized的具體作用是什么? 
我試著去掉同步,結(jié)果會拋出“java.lang.IllegalMonitorStateException”異常。

這是因為要調(diào)用某個對象的notify,wait方法,必須擁有該對象的監(jiān)視鎖,而該監(jiān)視鎖可以通過synchronized該對象獲得。

#8樓 得分:0回復(fù)于:2009-02-25 16:30:04
非常感謝!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多