基于Timer或者Thread实现的延迟执行代码的工具类

说明

众所周知
延时执行间隔某段时间之后,再去执行某段代码,实现这种结果有两种方式:
1)使用Sleep方法,就是去新建一个线程,然后里边放一个Thread.sleep()方法,这也是比较通俗的做法

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

2)使用java提供的API Timer

  Timer timer = new Timer();// 实例化Timer类
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
               //执行代码
            }
        },5000);//这里是毫秒

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

重头戏

关于Timer 和 Thread 就以上的使用可以实现延迟
接下来就是我写的一个工具类可以简化代码
想想每当要延迟代码执行时都要写一遍TImer或者Thread,感觉有些麻烦,现今有一个工具类简化这一步骤
话不多说,直接上代码

public class TimerUtil {
    private static final long CARDIANL = 1000;
    /**
     *
     * @param time 单位秒
     * @param timerInter
     */
    public static void delay(TimerInter timerInter,long time){
        delayByTimer(timerInter,time);
    }
    public static void delayByTimer(TimerInter timerInter,long time){
        Timer timer = new Timer();// 实例化Timer类
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                timerInter.run();
            }
        },time*CARDIANL);
    }
    public static void delayByThread(TimerInter timerInter,long time){
        new Thread(){
            public void run(){
                try {
                    Thread.sleep(time*CARDIANL);
                    timerInter.run();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
    public interface TimerInter{
        void run();
    }
}

实现方式简化,主要利用了java8 的lambda表达式
下面示例

    TimerUtil.delay(()->
    //执行代码
    },3);

这样是不是简化了嘻嘻

今天的分享到这,欢迎广大朋友在底下留言,点赞,收藏,转发

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值