首页 > 编程 > 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);      }  }  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表