玩一玩java定时器
来源:互联网 发布:js select 不可编辑 编辑:程序博客网 时间:2024/06/11 06:48
首先我要给大家介绍的是Timer这个类和ScheduledExecutorService这个类
java.util.Timer
java.util.concurrent.ScheduledExecutorService
神马?不知道我要讲什么,好吧 ,直接抛代码
现在用定时器,实现每三秒打印我一次,我很帅。实力三秒男 哈哈哈
方式一:用Timer类
import java.util.Timer;import java.util.TimerTask;public class TimerLesson {public static long period = 3000;//3秒男public static void main(String[] args) {Timer timer = new Timer();timer.scheduleAtFixedRate(new TimerTask() {@Overridepublic void run() {System.out.println("刘伊凡很帅");}}, period, period);}public void shutdown(Timer timer) {timer.cancel();}}方式一:用ScheduledExecutorService类
import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.ScheduledFuture;import java.util.concurrent.TimeUnit;public class ExecutorsLesson {private static long period = 3;//3秒男public static void main(String[] args) {ScheduledExecutorService singleThreadScheduledExecutor = Executors.newSingleThreadScheduledExecutor(); singleThreadScheduledExecutor.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {System.out.println("刘伊凡很帅");}}, period, period, TimeUnit.SECONDS);}public void shutdown(ScheduledFuture<?> scheduleAtFixedRate) {scheduleAtFixedRate.cancel(false);}}
技高一筹环节:
大家看到,这两段代码的执行都是创建了一个单独的线程实现了业务。到这里,就会想这两个不是他大舅他二舅都是他舅吗,没错,是这样,但我要说的是shutdown方法。大家看到两个实现的,cancel,ScheduledExecutorService 的cancel里面传一个boolean值,根据jdk的说明:- 如果应该中断执行此任务的线程,则为true;否则允许正在运行的任务运行完成,这个意思我理解的是,假若我们业务task的逻辑很长,在执行cancel的时候Timer会中断线程,而ScheduledExecutorService在cancel传false的时候,会执行完这一次的task,待下一次的task的时候中断。这个就厉害了,在真实的业务中我们当然希望我们控制手段更灵活,ScheduledExecutorService更符合我们的要求,做奸在床的时候是立即打断人家 还是等他们完事之后 这个就看你cancel用的6不6的时候了,去吧,骚年
当然在最后,当然要实现更复杂的定时任务,比如每周双休日执行task 或者每个节日执行task,我们就要借助quartz框架了,一般的业务需求,还是用原生的比较好,比较开销和简单性都很好,符合业务就行
TimerTask
cancel
public boolean cancel()
- 取消此计时器任务。如果任务安排为一次执行且还未运行,或者尚未安排,则永远不会运行。如果任务安排为重复执行,则永远不会再运行。(如果发生此调用时任务正在运行,则任务将运行完,但永远不会再运行。)
注意,从重复的计时器任务的 run 方法中调用此方法绝对保证计时器任务不会再运行。
此方法可以反复调用;第二次和以后的调用无效。
- 返回:
- 如果此任务安排为一次执行且尚未运行,或者此任务安排为重复执行,则返回 true。如果此任务安排为一次执行且已经运行,或者此任务尚未安排,或者此任务已经取消,则返回 false。(一般来说,如果此方法不允许发生一个或多个已安排执行,则返回true。)
cancel
boolean cancel(boolean mayInterruptIfRunning)
- 试图取消对此任务的执行。如果任务已完成、或已取消,或者由于某些其他原因而无法取消,则此尝试将失败。当调用 cancel 时,如果调用成功,而此任务尚未启动,则此任务将永不运行。如果任务已经启动,则mayInterruptIfRunning 参数确定是否应该以试图停止任务的方式来中断执行此任务的线程。
此方法返回后,对
isDone()
的后续调用将始终返回 true。如果此方法返回 true,则对isCancelled()
的后续调用将始终返回 true。 - 参数:
mayInterruptIfRunning
- 如果应该中断执行此任务的线程,则为 true;否则允许正在运行的任务运行完成- 返回:
- 如果无法取消任务,则返回 false,这通常是由于它已经正常完成;否则返回 true
- 玩一玩java定时器
- [Java--定时器]--定时器举例
- JAVA定时器
- java 定时器
- JAVA定时器
- java定时器
- JAVA定时器
- Java定时器
- JAVA定时器
- JAVA定时器
- java定时器
- Java定时器
- JAVA 定时器
- java定时器
- java定时器
- java定时器
- java定时器
- java定时器
- opencv中彩色图像通道分离、合成
- Anadroid 面试题
- ios集成极光推送的一些坑点及详解
- Java中的访问控制与修饰符
- OFBiz实现任务调度和JOB运行机制
- 玩一玩java定时器
- mysql中select * for update
- java String深入理解
- 局间中继与电路复用技术
- host文件地址
- jquery select通过value找text
- 测试用例与测试用例的设计方法
- 文章标题
- Ofbiz: 自定义表单校验