说明
众所周知
延时执行间隔某段时间之后,再去执行某段代码,实现这种结果有两种方式:
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);
这样是不是简化了嘻嘻
今天的分享到这,欢迎广大朋友在底下留言,点赞,收藏,转发