<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java線程(五):Timer和TimerTask Timer和TimerTask可以做為實現線程的第三種方式,前兩中方式分別是繼承自Thread類和實現Runnable接口。 Timer是一種線程設施,用于安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行,可以看成一個定時器,可以調度TimerTask。TimerTask是一個抽象類,實現了Runnable接口,所以具備了多線程的能力。 一個Timer可以調度任意多個TimerTask,它會將TimerTask存儲在一個隊列中,順序調度,如果想兩個TimerTask并發執行,則需要創建兩個Timer。下面來看一個簡單的例子: ? ? ? ? ~~~ import?java.util.Timer;?? import?java.util.TimerTask;?? public?class?TimerTest?{?? ????static?class?MyTimerTask1?extends?TimerTask?{?? ????????public?void?run()?{?? ????????????System.out.println("爆炸!!!");?? ????????}?? ????}????? ????public?static?void?main(String[]?args)?{?? ????????Timer?timer?=?new?Timer();?? ????????timer.schedule(new?MyTimerTask1(),?2000);//?兩秒后啟動任務?? ????}?? }?? ~~~ schedule是Timer調度任務的方法,Timer重構了四個schedule方法,具體可以查看JDK API。 看一個稍復雜的例子,假設有這樣一種需求,實現一個連環炸彈,2秒后爆炸一次,3秒后爆炸一次,如此循環下去,這就需要創建兩個任務,互相調度,代碼如下: ~~~ import?java.util.Date;?? import?java.util.Timer;?? import?java.util.TimerTask;?? public?class?TimerTest?{?? ????static?class?MyTimerTask1?extends?TimerTask?{?? ????????public?void?run()?{?? ????????????System.out.println("爆炸!!!");?? ????????????new?Timer().schedule(new?MyTimerTask2(),?2000);?? ????????}?? ????}?? ????static?class?MyTimerTask2?extends?TimerTask?{?? ????????public?void?run()?{?? ????????????System.out.println("爆炸!!!");?? ????????????new?Timer().schedule(new?MyTimerTask1(),?3000);?? ????????}?? ????}?? ????public?static?void?main(String[]?args)?{?? ????????Timer?timer?=?new?Timer();?? ????????timer.schedule(new?MyTimerTask2(),?2000);?? ????????while(true)?{?? ????????????System.out.println(new?Date().getSeconds());?? ????????????try?{?? ????????????????Thread.sleep(1000);?? ????????????}?catch?(InterruptedException?e)?{?? ????????????????//?TODO?Auto-generated?catch?block?? ????????????????e.printStackTrace();?? ????????????}?? ????????}?? ????}?? }?? ~~~ 自JDK5之后,可以用ScheduledThreadPoolExecutor來替代Timer。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看