博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
传统定时器技术
阅读量:6434 次
发布时间:2019-06-23

本文共 4465 字,大约阅读时间需要 14 分钟。

hot3.png

一、定时器的应用

    1、Timer类

    2、TimerTask类

二、代码实现

    1、炸弹多久后爆炸,再每隔多久爆炸(连环爆炸)

/** * @Title: TraditionalTimer.java * @Package com.lh.threadtest * @Description: TODO* @author Liu * @date 2018年1月15日 下午4:36:35 * @version V1.0 */package com.lh.threadtest.t2;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.TimeUnit;/** * @ClassName: TraditionalTimer * @Description: 传统定时器技术* @author Liu* @date 2018年1月15日 下午4:36:35 *  */public class TraditionalTimer {	public static void main(String[] args) throws InterruptedException {		//Timer:定时器		//TimerTask:定时任务		//schedule:表示执行定时任务		new Timer().schedule(new TimerTask() {						@Override			public void run() {				System.out.println("bombing...");			}		//只有一个参数:表示多久后(ms)执行(只炸一次);第二个参数:表示每隔多久执行(ms,连环爆炸)		}, 10000,3000);				//辅助的一个显示		while(true){			TimeUnit.SECONDS.sleep(1);			System.out.println(new Date().getSeconds());		}			}}

    2、嵌套另一个TimerTask定时任务,将报错

/** * @Title: TraditionalTimer.java * @Package com.lh.threadtest * @Description: TODO* @author Liu * @date 2018年1月15日 下午4:36:35 * @version V1.0 */package com.lh.threadtest.t2;import java.util.Timer;import java.util.TimerTask;/** * @ClassName: TraditionalTimer * @Description: 传统定时器技术* @author Liu* @date 2018年1月15日 下午4:36:35 *  */public class TraditionalTimer2 {	public static void main(String[] args) throws InterruptedException {		new Timer().schedule(new TimerTask() {						@Override			public void run() {				System.out.println("bombing...");				new Timer().schedule(/*new TimerTask() {										@Override					public void run() {						System.out.println("bombing...");											}				}*/this, 2000);//嵌套另一个TimerTask定时任务,将报错:java.lang.IllegalStateException: Task already scheduled or cancelled			}		}, 2000);	}}

    3、TimerTask声明明确化,并进行嵌套调用

/** * @Title: TraditionalTimer.java * @Package com.lh.threadtest * @Description: TODO* @author Liu * @date 2018年1月15日 下午4:36:35 * @version V1.0 */package com.lh.threadtest.t2;import java.util.Timer;import java.util.TimerTask;/** * @ClassName: TraditionalTimer * @Description: 传统定时器技术* @author Liu* @date 2018年1月15日 下午4:36:35 *  */public class TraditionalTimer3 {	public static void main(String[] args) throws InterruptedException {		class MyTimerTask extends TimerTask{			@Override			public void run() {				System.out.println("bombing...");				new Timer().schedule(new MyTimerTask(), 2000);			}		}				//可以正常运行的方法(每隔2s爆炸一次)		new Timer().schedule(new MyTimerTask(), 2000);	}}

    4、传统定时器技术 方案1,使用取余法

/** * @Title: TraditionalTimer.java * @Package com.lh.threadtest * @Description: TODO* @author Liu * @date 2018年1月15日 下午4:36:35 * @version V1.0 */package com.lh.threadtest.t2;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.TimeUnit;/** * @ClassName: TraditionalTimer * @Description: 传统定时器技术 方案1,使用取余法,交替爆炸:先2s爆炸,然后4s爆炸,如此往复... * @author Liu * @date 2018年1月15日 下午4:36:35 *  */public class TraditionalTimer4 {	private static int count = 0;	public static void main(String[] args) throws InterruptedException {		class MyTimerTask extends TimerTask {			@Override			public void run() {				count = (count + 1) % 2;				System.out.println("bombing...");				new Timer().schedule(new MyTimerTask(), 2000 + 2000 * count);			}		}		new Timer().schedule(new MyTimerTask(), 2000);		while (true) {			TimeUnit.SECONDS.sleep(1);			System.out.println(new Date().getSeconds());		}	}}

    5、传统定时器技术 方案2,建立两个不同的类

/** * @Title: TraditionalTimer.java * @Package com.lh.threadtest * @Description: TODO* @author Liu * @date 2018年1月15日 下午4:36:35 * @version V1.0 */package com.lh.threadtest.t2;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.TimeUnit;/** * @ClassName: TraditionalTimer * @Description: 传统定时器技术 方案2,建立两个不同的类:先2s爆炸,然后4s爆炸,如此往复... * @author Liu * @date 2018年1月15日 下午4:36:35 *  */public class TraditionalTimer5 {	public static void main(String[] args) throws InterruptedException {		new Timer().schedule(new MyTimerTaskA(), 2000);		while (true) {			TimeUnit.SECONDS.sleep(1);			System.out.println(new Date().getSeconds());		}	}}	//4s后爆炸	class MyTimerTaskA extends TimerTask {			@Override		public void run() {			System.out.println("bombing...");			new Timer().schedule(new MyTimerTaskB(), 4000);		}	}		//2s后爆炸	class MyTimerTaskB extends TimerTask {			@Override		public void run() {			System.out.println("bombing...");			new Timer().schedule(new MyTimerTaskA(), 2000);		}	}

 

转载于:https://my.oschina.net/Howard2016/blog/1607931

你可能感兴趣的文章
tornado+datatables分页
查看>>
集成 Kubernetes 与 Cloud Foundry,IBM自有一套
查看>>
php 中英文字符分割
查看>>
No module named yum
查看>>
Shell处理用户输入参数----getopts
查看>>
【函数】06、装饰器的应用
查看>>
v$sysstat
查看>>
剑指offer 66通关纪念
查看>>
医疗信息化 医学 医院管理 医疗器械 资料下载
查看>>
nginx.conf 示例配置
查看>>
在办公电脑上设置日志服务器监控思科和华为设备
查看>>
python 字符串替换
查看>>
我的友情链接
查看>>
Linux之常用网络命令
查看>>
linux php 安装 curl
查看>>
tomcat nginx默许的post大小限制
查看>>
OSI七层模型
查看>>
去除工程的.svn隐藏文件夹
查看>>
Python24 终端如何输出彩色字体
查看>>
XSS跨站脚本***
查看>>