我是靠谱客的博主 纯情鞋子,最近开发中收集的这篇文章主要介绍java实现延迟执行_Java中实现代码的延迟执行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

间隔某段时间之后,再去执行某段代码,实现这种结果有两种方式:

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

2)现在SUN推出新的解决方案,beepForAnHour设置了 ScheduledExecutorService ,在 1 小时内每 10 秒钟蜂鸣一次:

import static java.util.concurrent.TimeUnit.SECONDS;

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.ScheduledFuture;

class BeeperControl {

private final ScheduledExecutorService scheduler =

Executors.newScheduledThreadPool(1); //创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。池中所保存的线程数为1个,即使线程是空闲的也包括在内。

public void beepForAnHour() {

final Runnable beeper = new Runnable() {

public void run() { System.out.println("beep"); }

};

final ScheduledFuture

最后

以上就是纯情鞋子为你收集整理的java实现延迟执行_Java中实现代码的延迟执行的全部内容,希望文章能够帮你解决java实现延迟执行_Java中实现代码的延迟执行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部