国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Timer和TimerTask的使用

Timer和TimerTask的使用

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

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

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

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

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


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秒,如果傳遞一個(gè)Data參數(shù),就可以在某個(gè)固定的時(shí)間執(zhí)行這個(gè)任務(wù).
        
while(true)
{//這個(gè)是用來停止此任務(wù)的,否則就一直循環(huán)執(zhí)行此任務(wù)了
            
try 
{
                
int ch =
 System.in.read();
                
if(ch-c==0)
{
                    timer.cancel();//使用這個(gè)方法退出任務(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("________");
        }

    }

    
    
    
    
}



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

果然很方便吧^_^

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

 

package MyTimerTest;

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


/*
 * 本類給出了使用Timer和TimerTaske的主要方法,其中包括定制任務(wù),添加任務(wù)
 * 退出任務(wù),退出定時(shí)器.
 * 因?yàn)門imerTask的status域是包級(jí)可訪問的,所以沒有辦法在java.util.包外
 * 得到其狀態(tài),這對(duì)編程造成一些不便 .我們不能判斷某個(gè)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");//從控制臺(tái)讀出信息
                if (strInfo.charAt(strInfo.length() - 1==  {
                    strInfo 
= strInfo.substring(0, strInfo.length() - 2);
                }

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


    }


}

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
架構(gòu)系列——定時(shí)任務(wù)中的Timer類使用簡(jiǎn)析
Java中Timer的用法
JAVA定時(shí)執(zhí)行任務(wù)(Tomcat 下的定時(shí)任務(wù))
如何在Web工程中實(shí)現(xiàn)任務(wù)計(jì)劃調(diào)度
對(duì)于定時(shí)器和工程開始啟用的解釋
JDK Timer實(shí)現(xiàn)任務(wù)的調(diào)度舉例
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服