Java多线程与并发应用-(1)-定时任务1-Timer的使用

本文将深入探讨如何利用Java的Timer类和TimerTask类实现定时任务,包括简单的定时执行和复杂定时任务的区别及解决方法。通过实例演示,展示如何在不同间隔时间内触发多个定时任务。

真是受够了多线程的问题,今天开始就自己总结一下    

        Timer类和TimerTask类配合使用。Timer负责控制线程的执行时间,TimerTask中写业务代码,他实现了Runnable接口。但run()方法并没有实现,是一个抽象类。

Timer提供的API :

schedule的不同重载方法可以,支持多少秒之后执行,间隔多长时间执行,具体某个Date执行,他提供的API并不强大,适合简单的定时任务。比如10分钟后执行。但复杂的定时任务,并没有给出相应的API,比如,每隔一月的一号执行任务。如果有这样的需求,则使用quartz。quartz这里不做详细解释,以后的文章中可能再做详解。

例:如何用timer和TimerTask实现 一个炸弹每隔2秒炸一次,另一个每隔3秒炸一次

package com.lipeng;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerDemo {

	public static int count=0;
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		new Timer().schedule(new BoomTimeTask(), 2000);
		while(true)
		{
			Thread.sleep(1000);
			System.out.println(new Date().getSeconds());
		}
	}

}


class BoomTimeTask extends TimerTask
{

	@Override
	public void run() {
		System.out.println("boom!!!!!!!!!!!!!!!!!!!!!!!!!");
		TimerDemo.count++;
		new Timer().schedule(new BoomTimeTask(), TimerDemo.count%2==0?2000:3000);
	}
	
}

思路:

1.首先schedule方法中,schedule(TimerTask task, long delay) ,delay之后执行一边线程就结束了,而schedule(TimerTask task, long delay, long period) 是delay后执行以后每period都会执行一遍run方法,并不会死掉。

2. 第一个炸弹启动2秒之后炸,炸完启动第二个炸弹,3秒之后第二个炸弹炸,再启动一次第一个炸弹,如此循环。即递归的使用炸弹,调用炸弹的方法(run方法)。每次要执行的任务一样即run方法,只不过每次的执行时间不同,每隔一次2,3秒轮流换。这就要求定义一个全局的标识count来做开关。

注:以上例子来自张孝祥老师的-Java多线程与并发库高级应用

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值