java 延迟执行代码

来源:互联网 发布:仰卧起坐板 品牌 知乎 编辑:程序博客网 时间:2024/04/28 00:12

使用Sleep方法,就是去新建一个线程,然后里边放一个Thread.sleep()方法,这也是比较通俗的做法。

         new Thread(){
            public void run(){
               try {
                  Thread.sleep(5000);
                  System.out.println("love");
               } catch (InterruptedException e) { }
            }
         }.start();     //这种内部匿名类的写法,快速生成一个线程对象,也有利于快速垃圾回收

         但在main方法里直接加入Thread.sleep(),是对main线程的休眠;另一种错误的方法是把Thread.sleep放在一个方法内,而这个方法也是在main方法体内调用,与前者结果一样。

当然也可以使用 Java API 提供的Timer类,来实现。如下代码所示:

public class TimerDemo {  
  public static void main(String[] args) {
     final Timer timer=new Timer(); TimerTask task=new TimerTask(){
        public void run(){
            System.out.println("计时任务");
           //timer.cancel();         终止此计时器,丢弃所有当前已安排的任务。这不会干扰当前正在执行的任务(如果存在)。一旦终止了计时器,那么它的执行线程也会终止,并且无法根据它安排更多的任务。注意,在此计时器调用的计时器任务的 run 方法内调用此方法,就可以绝对确保正在执行的任务是此计时器所执行的最后一个任务。 
           }
       };
     
       timer.schedule(task,5000, 2000);   //这个命令就是5秒钟之后执行TimerTask里边的内容,后边的执行时间间隔为2秒钟。
    }
}

        通过调试发现,创建一个Timer对象,就会创建一个main线程之外的独立子线程程序,来专门执行计时器里的任务,而任务也被理解成为对象:TimerTask,这也体现了JAVA中一切皆是对象的理念。一个Timer里即使有多个TimerTask对象,也只会开启一个线程来应付。简单的时间延迟还是推荐用第一种方案,当然如果有间隔性的执行,只能用第二种。如果硬要第一种方案实现间隔性的执行,只能引入线程池来解决,那样就杀鸡用牛刀了。

0 0