一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Timer和TimerTask的使用...

 ShangShujie 2008-03-28

Timer和TimerTask的使用

開發(fā)者在線 Builder.com.cn 更新時間:2008-03-16作者:深夜兩點(diǎn) 來源:CSDN

本文關(guān)鍵詞: TimerTask Timer JAVA

這兩個類使用起來非常方便,可以完成我們對定時器的絕大多數(shù)需求

Timer類是用來執(zhí)行任務(wù)的類,它接受一個TimerTask做參數(shù)

Timer有兩種執(zhí)行任務(wù)的模式,最常用的是schedule,它可以以兩種方式執(zhí)行任務(wù):1:在某個時間(Data),2:在某個固定的時間之后(int delay).這兩種方式都可以指定任務(wù)執(zhí)行的頻率.看個簡單的例子:


import java.io.IOException;
import
 java.util.Timer;

public class TimerTest 
{
       
    
public static void main(String[] args)
{
        Timer timer 
= new
 Timer();
        timer.schedule(
new MyTask(), 10002000
);//在1秒后執(zhí)行此任務(wù),每次間隔2秒,如果傳遞一個Data參數(shù),就可以在某個固定的時間執(zhí)行這個任務(wù).
        
while(true)
{//這個是用來停止此任務(wù)的,否則就一直循環(huán)執(zhí)行此任務(wù)了
            
try 
{
                
int ch =
 System.in.read();
                
if(ch-c==0)
{
                    timer.cancel();//使用這個方法退出任務(wù)
                    
                }

            }
 catch (IOException e) {
                
// TODO Auto-generated catch block

                e.printStackTrace();
            }

        }

    }

    
    
    
static class MyTask extends java.util.TimerTask{

        @Override
        
public void run() 
{
            
// TODO Auto-generated method stub

            System.out.println("________");
        }

    }

    
    
    
    
}



如果你使用的是JDK 5+,還有一個scheduleAtFixedRate模式可以用,在這個模式下,Timer會盡量的讓任務(wù)在一個固定的頻率下運(yùn)行,舉例說明:在上面的 例子中,我們想讓MyTask在1秒鐘后,每兩秒鐘執(zhí)行一次,但是因為java不是實(shí)時的(其實(shí)java實(shí)時性很差.....),所以,我們在上個程序中 表達(dá)的原義并不能夠嚴(yán)格執(zhí)行.如果我們調(diào)用的是scheduleAtFixedRate,那么,Timer會盡量讓你的Task執(zhí)行的頻率保持在2秒一 次.運(yùn)行上面的程序,假設(shè)使用的是scheduleAtFixedRate,那么下面的場景就是可能的:1秒鐘后,MyTask 執(zhí)行一次,因為系統(tǒng)繁 忙,之后的2.5秒后MyTask 才得以執(zhí)行第二次,然后,Timer記下了這個延遲,并嘗試在下一個任務(wù)的時候彌補(bǔ)這個延遲,那么,1.5秒后, MyTask 將執(zhí)行的三次."以固定的頻率而不是固定的延遲時間去執(zhí)行一個任務(wù)"

果然很方便吧^_^

下面給出一個復(fù)雜點(diǎn)的例子,其中告訴大家怎么退出單個TimerTask,怎么退出所有Task

 

package MyTimerTest;

import java.io.IOException;
import java.util.Timer;


/*
 * 本類給出了使用Timer和TimerTaske的主要方法,其中包括定制任務(wù),添加任務(wù)
 * 退出任務(wù),退出定時器.
 * 因為TimerTask的status域是包級可訪問的,所以沒有辦法在java.util.包外
 * 得到其狀態(tài),這對編程造成一些不便 .我們不能判斷某個Task的狀態(tài)了.
 * 
 
*/


public class TimerTest {

    
public static void main(String[] args) {
        Timer timer 
= new Timer();
        MyTask myTask1 
= new MyTask();
        MyTask myTask2 
= new MyTask();
        myTask2.setInfo(
"myTask-2");
        timer.schedule(myTask1, 
10002000);
        timer.scheduleAtFixedRate(myTask2, 
20003000);
        
while (true{
            
try {
                
byte[] info = new byte[1024];
                
int len = System.in.read(info);
                String strInfo 
= new String(info, 0, len, "GBK");//從控制臺讀出信息
                if (strInfo.charAt(strInfo.length() - 1==  {
                    strInfo 
= strInfo.substring(0, strInfo.length() - 2);
                }

                
if (strInfo.startsWith("Cancel-1")) {
                    myTask1.cancel();
//退出單個任務(wù)
                    
// 其實(shí)應(yīng)該在這里判斷myTask2是否也退出了,是的話就應(yīng)該break.但是因為無法在包外得到
                    
// myTask2的狀態(tài),所以,這里不能做出是否退出循環(huán)的判斷.
                }
 else if (strInfo.startsWith("Cancel-2")) {
                    myTask2.cancel();
                }
 else if (strInfo.startsWith("Cancel-All")) {
                    timer.cancel();
//退出Timer
                    break;
                }
 else {
                    
// 只對myTask1作出判斷,偷個懶^_^
                    myTask1.setInfo(strInfo);
                }

            }
 catch (IOException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }


    
static class MyTask extends java.util.TimerTask {
        String info 
= "^_^";

        @Override
        
public void run() {
            
// TODO Auto-generated method stub
            System.out.println(info);
        }


        
public String getInfo() {
            
return info;
        }


        
public void setInfo(String info) {
            
this.info = info;
        }


    }


}

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    高跟丝袜av在线一区二区三区| 五月激情综合在线视频| 国产一区二区精品高清免费| 国产传媒欧美日韩成人精品| 东京热一二三区在线免| 九九九热在线免费视频| 日本99精品在线观看| 九九热视频网在线观看| 亚洲国产日韩欧美三级| 亚洲中文在线男人的天堂| 中文字幕久久精品亚洲乱码| 夜夜躁狠狠躁日日躁视频黑人| 美女露小粉嫩91精品久久久| 日韩一区二区三区有码| 亚洲专区中文字幕视频| 亚洲一区二区三区免费的视频| 亚洲天堂精品1024| 熟女乱一区二区三区四区| 国产精品午夜视频免费观看| 蜜桃传媒视频麻豆第一区| 久久国产亚洲精品成人| 欧美成人精品一区二区久久| 男人和女人干逼的视频| 少妇激情在线免费观看| 国产一区二区在线免费| 久久99青青精品免费观看| 国产一区二区熟女精品免费| 欧美多人疯狂性战派对| 中文字幕一区二区免费| 日韩欧美三级中文字幕| 黄片免费在线观看日韩| 日韩免费av一区二区三区| 欧美性欧美一区二区三区| 亚洲国产精品久久网午夜| 真实偷拍一区二区免费视频| 熟妇久久人妻中文字幕| 国产精品视频第一第二区| 偷拍偷窥女厕一区二区视频| 欧美极品欧美精品欧美| 日本高清一区免费不卡| 护士又紧又深又湿又爽的视频|