Java线程(五):Timer和TimerTask

Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。…

大家好,又见面了,我是你们的朋友全栈君。

        Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。

        Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

        一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,则需要创建两个Timer。下面来看一个简单的例子:        

import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
	static class MyTimerTask1 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
		}
	}	
	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new MyTimerTask1(), 2000);// 两秒后启动任务
	}
}

        schedule是Timer调度任务的方法,Timer重构了四个schedule方法,具体可以查看JDK API。

        看一个稍复杂的例子,假设有这样一种需求,实现一个连环炸弹,2秒后爆炸一次,3秒后爆炸一次,如此循环下去,这就需要创建两个任务,互相调度,代码如下:

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
	static class MyTimerTask1 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
			new Timer().schedule(new MyTimerTask2(), 2000);
		}
	}
	static class MyTimerTask2 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
			new Timer().schedule(new MyTimerTask1(), 3000);
		}
	}
	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new MyTimerTask2(), 2000);
		while(true) {
			System.out.println(new Date().getSeconds());
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

        自JDK5之后,可以用ScheduledThreadPoolExecutor来替代Timer。

        本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/7436458,转载请注明。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126456.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ideaspringboot启动_idea运行不出结果

    ideaspringboot启动_idea运行不出结果idea解决Command line is too long. Shorten command line for ServiceStarter or also for Application报错1.在IDEA里找到”.idea===>workspace.xml”2.找到,在里面添加即可

    2022年8月19日
    9
  • 初识云计算的三种服务模式 (IaaS SaaS PaaS)

    初识云计算的三种服务模式 (IaaS SaaS PaaS)

    2022年2月6日
    49
  • 黑苹果收集

    黑苹果收集

    2021年8月26日
    50
  • java打印菱形思路[通俗易懂]

    java打印菱形思路[通俗易懂]总共2个大的for循环  里边有小的对吧第一个大的for是打印菱形的上半部分for(i=1;i  { 这个小的for是打印每一行前边的空格   for(j=1;j   System.out.print(“”); 这个是打印星星的   for(j=1;j   System.out.print(“*”); 这个是打印完一行的换行  S

    2022年9月29日
    3
  • scrapy爬虫案例_Python爬虫 | 一条高效的学习路径

    scrapy爬虫案例_Python爬虫 | 一条高效的学习路径数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如:豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索用户的舆论导向。淘宝、京东:抓取商品、评论及销量数据,对各种商品及用户的消费场景进行分析。搜房、链家:抓取房产买卖及租售信息,分析房价变化趋势、做不同区域的房价分析。拉勾、智联:爬取各类职位信息,分析各行业人才需求情况及薪资…

    2022年6月26日
    37
  • resnet50代码详解_一张图看懂系列

    resnet50代码详解_一张图看懂系列直接上流程图,算法很清晰。仅包括卷积层和全连接层,不包括池化层,正好50层。相比于ResNet_50,ResNet_101就是在上图第3个大虚线框多了17个bottleneck,17*3+50=101,说白了就是将下图复制17个加入上图的第3个大虚线框内:画图不易,转载请注明出处!…

    2022年10月6日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号