国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java中定時器幾種實現方式

2019-11-06 07:09:36
字體:
來源:轉載
供稿:網友

     定時器是一個好東西,起到了一個時時監聽的作用。個人感覺擁有強大搶票功能的智行App其后臺應該也使用到它的,客戶端將用戶的訂票需求發送到其后臺的服務端,服務端便為其時時監聽12306的數據庫變化,若有則取之。java里實現定時器大致有如下4種:

一.使用java原生庫中的Timerl類

  1.規定在指定時間間隔執行一次,使用時若不再使用時應該及時將定時器關閉

    public static void timer1() {          Timer timer = new Timer();          timer.schedule(new TimerTask() {              public void run() {                  System.out.PRintln("-------Xiuying,I love you!--------");              }          }, 2000);// 設定指定的時間time,此處為2000毫秒      }     2.延遲定時器執行的開始,并在固定的時間間隔執行run

   // schedule(TimerTask task, long delay, long period)  

    public static void timer2() {          Timer timer = new Timer();          timer.schedule(new TimerTask() {              public void run() {                  System.out.println("-------Xiuying,I love you!--------");              }          }, 1000, 1000);      }  
  3.設定指定任務task在指定延遲delay后進行固定頻率peroid的執行。// scheduleAtFixedRate(TimerTask task, long delay, long period)      public static void timer3() {          Timer timer = new Timer();          timer.scheduleAtFixedRate(new TimerTask() {              public void run() {                  System.out.println("-------設定要指定任務--------");              }          }, 1000, 2000);      }    4.安排指定的任務task在指定的時間firstTime開始進行重復的固定速率period執行.     // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)      public static void timer4() {          Calendar calendar = Calendar.getInstance();          calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制時          calendar.set(Calendar.MINUTE, 0);       // 控制分          calendar.set(Calendar.SECOND, 0);       // 控制秒            Date time = calendar.getTime();         // 得出執行任務的時間,此處為今天的12:00:00            Timer timer = new Timer();          timer.scheduleAtFixedRate(new TimerTask() {              public void run() {                  System.out.println("-------設定要指定任務--------");              }          }, time, 1000 * 60 * 60 * 24);// 這里設定將延時每天固定執行      }  }  

二.使用線程:

1.使用簡單的線程加循環,再利用線程的sleep(),一直讓工作在運行就行

public class Task1 {      public static void main(String[] args) {          // run in a second          final long timeInterval = 1000;          Runnable runnable = new Runnable() {              public void run() {                  while (true) {                      // ------- code for task to run                      System.out.println("Hello !!");                      // ------- ends here                      try {                          Thread.sleep(timeInterval);                      } catch (InterruptedException e) {                          e.printStackTrace();                      }                  }              }          };          Thread thread = new Thread(runnable);          thread.start();      }  }     3.ScheduledExecutorService是從Java SE5的java.util.concurrent里,做為并發工具類被引進的,這是最理想的定時任務實現方式。    相比于上兩個方法,它有以下好處:   1>相比于Timer的單線程,它是通過線程池的方式來執行任務的     2>可以很靈活的去設定第一次執行任務delay時間   3>提供了良好的約定,以便設定執行的時間間隔      下面是實現代碼,我們通過ScheduledExecutorService#scheduleAtFixedRate展示這個例子,通過代碼里參數的控制,首次執行加了delay時間。  

public class Task3 {      public static void main(String[] args) {   Runnable runnable = new Runnable() {              public void run() {                  // task to run goes here                  System.out.println("Hello !!");              }          };          ScheduledExecutorService service = Executors                  .newSingleThreadScheduledExecutor();          // 第二個參數為首次執行的延時時間,第三個參數為定時執行的間隔時間          service.scheduleAtFixedRate(runnable, 10, 1, TimeUnit.SECONDS);      }  }  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长泰县| 体育| 夏津县| 清涧县| 平原县| 贵阳市| 松潘县| 日喀则市| 博野县| 深水埗区| 馆陶县| 青冈县| 隆回县| 汉阴县| 连州市| 湖南省| 尉氏县| 青浦区| 磴口县| 赤城县| 鄱阳县| 宽城| 永平县| 上犹县| 金平| 满城县| 榆社县| 瑞昌市| 南汇区| 香港| 广东省| 大埔区| 云安县| 永仁县| 南宁市| 河间市| 恩施市| 威信县| 宁南县| 德庆县| 麻城市|