TimerTask與Timer類的應(yīng)用

    時(shí)間:2024-09-04 17:03:47 SUN認(rèn)證 我要投稿
    • 相關(guān)推薦

    關(guān)于TimerTask與Timer類的應(yīng)用

      Timer類就像一個(gè)定時(shí)器,用于設(shè)置特定的時(shí)間或周期,來配合線程動(dòng)作的執(zhí)行,但是只調(diào)用Timer無法執(zhí)行線程動(dòng)作,必須配合另一個(gè)類TimerTask的方法才能使用。從示例6-13中可以發(fā)現(xiàn)Timer類與Thread類很相近。

      public Timer ()

      創(chuàng)建一個(gè)新的timer對(duì)象。

      Timer屬于計(jì)時(shí)器類,Time建立后,需要調(diào)用schedule()方法來執(zhí)行計(jì)劃任務(wù),計(jì)劃調(diào)度的方法有許多運(yùn)用方式:

      public void schedule (TimerTask task, long delay)

      執(zhí)行任務(wù)前先等待一段時(shí)間。task代表要執(zhí)行的任務(wù),delay代表需要等待的時(shí)間,單位為毫秒(1000毫秒為1秒)。

      public void schedule (TimerTask task,

      Date time)

      在指定的系統(tǒng)時(shí)間time之后開始執(zhí)行任務(wù)。

      public void schedule (TimerTask task,

      long delay,

      long period)

      延遲一段時(shí)間后開始執(zhí)行任務(wù),任務(wù)按照設(shè)定的周期執(zhí)行。傳入的參數(shù):delay為延遲時(shí)間,period為周期時(shí)間,單位均為毫秒。

      public void schedule(TimerTask task,

      Date firstTime,

      long period)

      在指定的時(shí)間后開始執(zhí)行任務(wù),任務(wù)按照設(shè)定的周期執(zhí)行。傳入的參數(shù):firstTime為指定等待時(shí)間,period為周期時(shí)間,單位都是毫秒。

      public void scheduleAtFixedRate (TimerTask task,

      long delay,

      long period)

      執(zhí)行任務(wù)內(nèi)容后,等待delay時(shí)間,再按照period周期時(shí)間繼續(xù)執(zhí)行任務(wù),單位都是毫秒。

      public void scheduleAtFixedRate

      (TimerTask task,

      Date firstTime,

      long period)

      先等待一段時(shí)間firstTime,再執(zhí)行計(jì)劃任務(wù),然后按照period周期時(shí)間繼續(xù)執(zhí)行任務(wù),單位都是毫秒。

      public void cancel()

      停止timer計(jì)時(shí)。

      有了Timer的各項(xiàng)調(diào)用方法,還不能直接執(zhí)行計(jì)劃任務(wù),需要跟TimerTask類共同運(yùn)用才能使計(jì)劃任務(wù)開始運(yùn)行。TimerTask所包含的相關(guān)方法如下:

      public void TimerTask ()

      創(chuàng)建一個(gè)新的TimerTask對(duì)象。

      public abstract void run()

      運(yùn)行計(jì)劃任務(wù)的工作內(nèi)容。

      public void cancel()

      中止TimerTask類的執(zhí)行流程,不再執(zhí)行所調(diào)度的工作內(nèi)容。

      public void scheduleExcutionTime()

      實(shí)際運(yùn)行計(jì)劃任務(wù)所用的時(shí)間。

      示例6-13

      /×

      Timer和TimerTask類運(yùn)行計(jì)劃任務(wù)

      ×/

      import javax.microedition.midlet.×;

      import javax.microedition.lcdui.×;

      import java.util.×;

      public class threadDemo3 extends MIDlet

      {

      Display display;

      canvasThread canvasthread;

      public threadDemo3()

      {

      canvasthread=new canvasThread();

      display=Display.getDisplay(this);

      }

      public void startApp()

      {

      display.setCurrent(canvasthread);

      }

      public void pauseApp(){}

      public void destroyApp(boolean unconditional){}

      public class canvasThread extends Canvas

      {

      int gameaction=0;

      int view=0;

      boolean again;

      //聲明一個(gè)Tim er類

      Timer timers;

      Image[] cloudImage;

      Image[] sunImage;

      public canvasThread()

      {

      timers=new Timer();

      try{

      cloudImage = new Image[]{

      Image.createImage("/cloud-1.png"),

      Image.createImage("/cloud-2.png"),

      Image.createImage("/cloud-3.png"),

      Image.createImage("/cloud-4.png")

      };

      sunImage = new Image[]{

      Image.createImage("/sun-1.png"),

      Image.createImage("/sun-2.png"),

      Image.createImage("/sun-3.png"),

      Image.createImage("/sun-4.png")

      };

      }catch(Exception ex){}

      }

      public void keyPressed(int keyCode)

      {

      gameaction=getGameAction(keyCode);

      switch(gameaction)

      {

      case FIRE:

      //運(yùn)行計(jì)劃任務(wù)

      actionView();

      break;

      }

      }

      public void paint(Graphics g)

      {

      g.setColor(0xFFFFFF);

      g.fillRect(0, 0, getWidth(), getHeight());

      g.setColor(0);

      g.drawString("Timer線程動(dòng)畫應(yīng)用", getWidth()/2, 20,

      Graphics.HCENTER | Graphics.TOP);

      g.drawImage(sunImage[view], getWidth()/2, 50, Graphics.HCENTER |

      Graphics.TOP);

      g.drawImage(cloudImage[view], getWidth()/2, 50, Graphics.HCENTER

      | Graphics.TOP);

      }

      private void actionView()

      {

      /×

      安排一個(gè)計(jì)劃任務(wù)

      運(yùn)行任務(wù)內(nèi)容:goCanvas()

      delay時(shí)間:500毫秒

      period周期:500毫秒

      ×/

      timers.schedule(new goCanvas(), 500, 500);

      }

      //計(jì)劃任務(wù)程序內(nèi)容

      class goCanvas extends TimerTask

      {

      public void run()

      {

      repaint();

      if(again)

      view--;

      else

      view++;

      if(again && view==0)

      again=false;

      if(!again && view==3)

      again=true;

      }

      }

      }

      }

      【說明】本線程使用計(jì)劃任務(wù)進(jìn)行,所達(dá)到的效果跟使用線程的方式是相同的。只是在計(jì)劃的內(nèi)容上有所不同,例如不需要sleep()暫停時(shí)間,而是由schedule控制暫停時(shí)間。

    【TimerTask與Timer類的應(yīng)用】相關(guān)文章:

    小學(xué)雞兔同籠類應(yīng)用題03-31

    英語四級(jí)應(yīng)用類作文寫作技巧03-30

    2016小升初數(shù)學(xué)常考的4類應(yīng)用題01-23

    2016考研英語:攻克高分作文之告示類應(yīng)用文03-19

    2017中職類計(jì)算機(jī)應(yīng)用基礎(chǔ)試題「附答案」03-06

    速錄介紹及應(yīng)用03-05

    EDA技術(shù)與應(yīng)用03-31

    草坪的景觀應(yīng)用03-13

    計(jì)算機(jī)應(yīng)用技術(shù)的應(yīng)用與發(fā)展03-27

    91久久大香伊蕉在人线_国产综合色产在线观看_欧美亚洲人成网站在线观看_亚洲第一无码精品立川理惠

      日本天码AⅤ片在线电影 | 婷婷丁香五月深爱憿情网 | 久久亚洲精品永久网站 | 呦呦婷婷视频在干 | 亚洲永久网址在线观看 | 日本中文字幕二区区精品 |