延迟执行代码【转】

使用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对象,也只会开启一个线程来应付。简单的时间延迟还是推荐用第一种方案,当然如果有间隔性的执行,只能用第二种。如果硬要第一种方案实现间隔性的执行,只能引入线程池来解决,那样就杀鸡用牛刀了。
新加评论 评论标题: