Java实现简单定时任务

来源:互联网 发布:知尚书是几品官 编辑:程序博客网 时间:2024/05/14 11:56

了解了一下Java实现简单定时任务的三种方式,分别做了个例子。

自己写篇以记录、备忘。

注释都清楚了,不另外解释。

方式一:

package test.timertask;/** * 使用Thread.sleep的方式来实现 * 这种方式完全是自己实现的,该控制的地方控制,怎么写都可以 * @author wz */public class MyTimerTask {public static void main(String[] args) {MyTimerTask mt  = new MyTimerTask();mt.task();}public void task(){final long timeInterval = 1000;(new Runnable() {public void run() {while (true) {// 执行任务System.out.println("do the task……");try {Thread.sleep(timeInterval);} catch (InterruptedException e) {e.printStackTrace();}}}}).run();//这里直接调runnable的run方法了,这样是由main方法的执行线程直接转去执行这个runnable了(同一个线程)//当然也可new一个Thread,将runnable扔进去后调用其start方法(另启一线程)}}

方式二:

package test.timertask;import java.util.Timer;import java.util.TimerTask;/** *  * @author wz * 通过Timer和TimerTask来实现,jdk自己实现且封装了其操作, * TimerTask实现Runnable接口,但是其实现正是留给用户制定任务的接口 * 然后通过Timer来执行即可,Timer另启线程来执行任务,且实现了线程同步的,所示线程安全的 * Timer维持一个任务队列,可以调度多个任务 *  */public class MyTimerTask2 {public static void main(String[] args) {MyTimerTask2 mt2  =new MyTimerTask2();mt2.task();}public void task(){//制定一个任务TimerTask task = new TimerTask() {@Overridepublic void run() {System.out.println("执行任务ing");}};//task - 所要安排的任务。//delay - 执行任务前的延迟时间,单位是毫秒。//period - 执行各后续任务之间的时间间隔,单位是毫秒。 Timer timer = new Timer();long delay = 0;long intevalPeriod = 1 * 1000;timer.scheduleAtFixedRate(task, delay, intevalPeriod);}}

方式三:

package test.timertask;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.ScheduledFuture;import java.util.concurrent.TimeUnit;/** *  * @author wz * jdk1.5提供了支持并发的定时任务处理工具ScheduledExecutorService * 1.以线程池的方式来执行任务,效率高了 * 2.可以设置开始延迟时间和任务取消时间 * */public class MyTimerTask3 {public static void main(String[] args) {MyTimerTask3 mtt = new MyTimerTask3();mtt.taskForAPeriod();}private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);public void taskForAPeriod() {//定义一个任务final Runnable task = new Runnable() {public void run() {System.out.println("执行任务");}};//scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)://通过ScheduledExecutorService的scheduleAtFixedRate来执行任务//参数//command - 要执行的任务//initialDelay - 首次执行的延迟时间//period - 连续执行之间的周期//unit - initialDelay 和 period 参数的时间单位final ScheduledFuture<?> taskHandle = scheduler.scheduleAtFixedRate(task, 1, 1, TimeUnit.SECONDS);//schedule(Runnable command,long delay,TimeUnit unit)创建并执行在给定延迟后启用的一次性操作。 (取消任务本身也是一个任务,一次去下就OK)//参数://command - 要执行的任务//delay - 从现在开始延迟执行的时间//unit - 延迟参数的时间单位 scheduler.schedule(new Runnable() {public void run() {taskHandle.cancel(true);//取消任务}}, 10, TimeUnit.SECONDS);//在10个TimeUnit.SECONDS时间单位后}}



0 0
原创粉丝点击