`

传统定时器技术回顾

阅读更多
/**
 * TraditionalTimer.java
 * cn.com.songjy.test.socket.thread
 * Function: TODO 
 *
 *   version    date      author
 * ──────────────────────────────────
 *   	1.0	 2013-8-15    songjy
 *
 * Copyright (c) 2013, TNT All Rights Reserved.
 */

package cn.com.songjy.test.socket.thread;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * ClassName:TraditionalTimer
 * 
 * @author songjy
 * @version 1.0
 * @since v1.0
 * @Date 2013-8-15 下午9:33:29
 */

public class TraditionalTimer {

	private static Log log = LogFactory.getLog(TraditionalThread.class);
	private static long count;

	public static void main(String[] args) {

		/************ 定时Bomb ***********/
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				log.info("炸毁目标!");
			}
		}, 10 * 1000l);// 10秒后炸毁目标

		/************ 连环Bomb ***********/
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				log.info("连环Bomb启动,目标销毁,哦也!");
			}
		}, 10 * 1000l, 3 * 1000l);// 10秒后启动第一个Bomb,然后每隔3秒启动一个Bomb!(连环炸,够爽,o(∩_∩)o
									// 哈哈)

		/************ 子母Bomb ***********/
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				log.info("母Bomb启动,目标销毁,哦也!");
				new Timer().schedule(new TimerTask() {

					@Override
					public void run() {
						log.info("子Bomb启动,目标销毁,哦也!");
					}
				}, 2 * 1000l);
			}
		}, 2 * 1000l);

		class MyBomb01 extends TimerTask {

			@Override
			public void run() {
				count = (count + 1) % 2;
				log.info("连环子母Bomb启动,目标销毁,哦也!");
				new Timer().schedule(new MyBomb01(), 2 * 1000l + 2000 * count);
			}

		}
		
		/************ 连环子母Bomb一 ***********/
		new Timer().schedule(new MyBomb01(), 2 * 1000l);// 第一个Bomb2秒后启动,间隔4秒后第二个Bomb启动,如此循环!(够狠的,嘻嘻)
		
		/************ 连环子母Bomb二 ***********/
		new Timer().schedule(new MyBomb02(), 2 * 1000l);//第一个Bomb与第二个Bomb2秒后启动,第三个间隔4秒后启动,此后与上一个【连环子母Bomb一】一样的规律
		
		String t = "2013-08-15 22:45:00";
		Date firstTime = null;
		try {
			firstTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(t);
		} catch (ParseException e) {
			log.error(e.getMessage(), e);
		}

		/************ 定时Bomb,2013-08-15晚上10点45分,启动Bomb ***********/
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				log.info("终于到了2013-08-15晚上10点45分,启动Bomb,目标销毁,任务完成,睡觉去,o(∩_∩)o 哈哈");
			}
		}, firstTime);

		/************ 定时Bomb,每天晚上10点45分,启动Bomb ***********/
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				log.info("现在又是晚上10点45分,启动Bomb,目标销毁,任务完成,又该睡觉去,(*^__^*) 嘻嘻");
			}
		}, firstTime, 24 * 60 * 60 * 1000l);

		// 为了查看效果,可以添加以下代码
		while (true) {
			log.info(Calendar.getInstance().get(Calendar.SECOND));// 输出当前的秒数
			try {
				Thread.sleep(1 * 1000l);
			} catch (InterruptedException e) {
				log.error(e.getMessage(), e);
			}
		}

	}

}


class MyBomb02 extends TimerTask {
	
	private static Log log = LogFactory.getLog(MyBomb02.class);

	@Override
	public void run() {
		log.error("连环子母Bomb启动,目标销毁,哦也!");
		new Timer().schedule(new MyBomb03(), 2 * 1000l);
	}

}

class MyBomb03 extends TimerTask {
	
	private static Log log = LogFactory.getLog(MyBomb03.class);

	@Override
	public void run() {
		log.error("连环子母Bomb启动,目标销毁,哦也!");
		new Timer().schedule(new MyBomb02(), 4 * 1000l);
	}

}


引自:http://down.51cto.com/data/443407
分享到:
评论

相关推荐

    Java多线程与并发库高级应用视频教程22集

    资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...

    java加强笔记

    传统定时器技术回顾 - 定时器(`Timer`)类可以用来定期执行任务。 ##### 3. 传统线程互斥技术 - 线程间的互斥通常通过`synchronized`关键字或显式锁(`Lock`)来实现。 ##### 4. 传统线程同步通信技术 - 线程之间的...

    电子技术课程设计报告交通灯.doc

    这项设计旨在结合传统设计方法与现代电子设计自动化技术,以数字信号处理为核心,实现交通管理的自动化。 在第一章“课题背景”中,设计背景部分解释了交通信号灯对于维持交通秩序、提高道路通行能力和减少交通事故...

    微机原理和接口 交通灯接口课程设计

    在传统的定时控制方式中,交通灯的红绿灯转换间隔是固定的,这往往会导致道路资源的浪费或交通拥堵。例如,设定东西方向60秒,南北方向40秒的通行时间可能无法适应实时的交通需求。而模糊控制技术虽然可以根据车辆...

    数字频率计51单片机.doc

    单脉冲测量是数字频率计的核心技术,它通过捕捉输入信号的一个完整周期,然后利用单片机内部的定时器进行定时,计数器在预设的时间内记录输入信号的脉冲数。通过对这些数据的处理,可以计算出信号的频率。 **第 2 ...

    使用RxJS更优雅地进行定时请求详析

    在传统的JavaScript定时器(`setTimeout`或`setInterval`)中,异步请求可能无法按顺序返回结果,导致在进度条显示等场景中出现问题。而使用`interval`配合RxJS的管道方法,我们可以确保请求的顺序和响应的处理顺序...

    微机原理课程设计交通灯

    程序运行结果展示了设计的实际效果,课程设计总结则对整个过程进行回顾和分析,可能包括遇到的问题、解决方案以及改进的建议。 在实际交通管理中,采用定时加中断控制的方式可以灵活调整信号灯的时间间隔,适应不同...

    初学者--51单片机教程

    这种方法打破了传统单片机教学中先理论后实践的模式,通过一系列具体的实验项目来教授单片机的使用方法,使学习过程更加直观、高效。 - **教程内容**: - **上册**: 主要介绍单片机的基本原理、硬件连接、软件编程等...

    基于51单片机三角波信号发生器设计论文.doc

    传统的函数信号发生器主要产生正弦波、方波和锯齿波等标准波形,但特殊波形发生器价格较高。 本文档围绕基于51单片机设计的三角波信号发生器展开,该设计旨在产生多种波形,包括三角波、方波和正弦波,并允许用户...

    Java SSM开发大众点评后端

    1回顾Spring MVC的工作流程 2总结Spring MVC的数据绑定 3Spring定时器、拦截器的应用 4跟踪Spring源码,追踪解决问题 前后端分离开发 手把手演示如何串联React技术栈App和管理后台 让后台Form表单提交符合RESTful...

    51单片机超高精度6路舵机控制程序

    传统的舵机控制方法往往依赖于定时器中断来产生周期性的脉冲信号,从而控制舵机的转动角度。然而,为了达到更高的控制精度,我们需要对传统方法进行改进。 #### 二、基础知识回顾 - **51单片机**: 是一种广泛使用...

    基于51单片机电子密码锁设计说明.doc

    - **背景**: 随着社会进步和技术发展,传统的机械锁已经不能满足现代家庭对安全性的需求。电子密码锁因其更高的安全性和灵活性而受到青睐。 - **传统锁具的问题**: 传统锁具通常使用铜、铝、锌等材质,容易受到物理...

    flash时钟13个样式

    《Flash时钟:13款独特样式的魅力解析》 Flash技术在过去的互联网时代中扮演了重要的角色,尤其是在网页设计...尽管如今Flash逐渐被其他技术所替代,但这些作品仍值得我们回顾,从中汲取灵感,应用于新的技术环境中。

    基于-AT89S51D单片机多功能电子万年历设计.doc

    1. **单片机技术**:AT89S51D是一款基于8051内核的单片机,具备存储器、定时器/计数器、串行通信接口等多种功能,适合用于构建简单的电子系统。 2. **系统设计**:系统设计包括硬件和软件两部分。硬件部分主要涉及...

    python量化交易视频课

    首先,"01_量化交易介绍.mp4"会涵盖量化交易的基本概念,包括为什么选择Python进行量化交易,Python在数据分析和金融领域的优势,以及量化交易与传统交易的区别。课程可能会讲解到回测、模拟交易、算法交易等核心...

    多功能抢答器.rar

    在课题背景及设计目的中,文档阐述了传统抢答方式的局限性,比如使用举手回答的主观性和不公平性,并且提到了随着电子技术的发展,抢答器已经实现了从简单的机械或模拟电路到复杂数字电路的转型。设计者提出了通过...

    windows程序设计

    - **字符集简史**:回顾字符集的发展历程,从ASCII到Unicode的转变。 - **宽字符和C**:探讨宽字符在C语言中的表示方法和使用技巧。 - **宽字符和WINDOWS**:讲解Windows环境下如何支持和处理宽字符。 #### 3. 窗口...

    基于AT89S52单片机的智能多用表设计.doc

    传统仪表在进行电压、电阻等参数测量时,通常需要手动切换量程,这种操作方式不仅繁琐,还可能导致测量误差或设备损坏。为了解决这一问题,现代电子测量系统趋向于更高的精度与智能化水平,其中全量程无档自动量程...

Global site tag (gtag.js) - Google Analytics