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

分享

Timer和TimerTask的使用...

 ShangShujie 2008-03-28

Timer和TimerTask的使用

開發(fā)者在線 Builder.com.cn 更新時間:2008-03-16作者:深夜兩點 來源: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ù)在一個固定的頻率下運行,舉例說明:在上面的 例子中,我們想讓MyTask在1秒鐘后,每兩秒鐘執(zhí)行一次,但是因為java不是實時的(其實java實時性很差.....),所以,我們在上個程序中 表達的原義并不能夠嚴格執(zhí)行.如果我們調(diào)用的是scheduleAtFixedRate,那么,Timer會盡量讓你的Task執(zhí)行的頻率保持在2秒一 次.運行上面的程序,假設(shè)使用的是scheduleAtFixedRate,那么下面的場景就是可能的:1秒鐘后,MyTask 執(zhí)行一次,因為系統(tǒng)繁 忙,之后的2.5秒后MyTask 才得以執(zhí)行第二次,然后,Timer記下了這個延遲,并嘗試在下一個任務(wù)的時候彌補這個延遲,那么,1.5秒后, MyTask 將執(zhí)行的三次."以固定的頻率而不是固定的延遲時間去執(zhí)行一個任務(wù)"

果然很方便吧^_^

下面給出一個復(fù)雜點的例子,其中告訴大家怎么退出單個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ù)
                    
// 其實應(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ā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多