我在代码中实现了以下计时器功能
Timer timer = new Timer();
TimerTask tt = new TimerTask() {
public void run() {
System.out.println("Timer started");
//my Logic
};
};
timer.schedule(tt, 60000, 60000);
上述计时器每1分钟运行一次。我没有任何问题执行这个代码。
因为这段代码有内部类,它也重写了run方法,我想知道是否有其他有效的方法来编写计时器逻辑,或者这是我们处理计时器的唯一方法。
2条答案
按热度按时间svmlkihl1#
热释光;博士
你要求:
无内部类的java计时器功能
将任务定义为一个单独的类
Runnable
接口,示例提交给ScheduledExecutorService
对象。你会被反复处决,而不涉及内部阶级。
使用执行器服务
正如javadoc中提到的
Timer
/TimerTask
类已被添加到Java5中的executors框架所取代。请参见oracle的教程。从获取executor服务对象
Executors
班级。要安排重复任务,请获取ScheduledExecutorService
.定义实现runnable的独立类
提交要作为类型的对象执行的任务
Runnable
. 此接口需要一个方法run
执行人服务部称之为。示例化。
传给你的遗嘱执行人。其他参数指定第一次运行之前要等待多长时间,然后指定之后重复执行的频率。
最后一定要关闭你的执行服务。否则它的后台线程池可能会无限期地继续,就像僵尸一样?♂️.
xpszyzbs2#
如果您使用的是java 8,则可以简化代码: