好贷网好贷款

Java多线程--Timer补充

发布时间:2016-12-5 2:22:34 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Java多线程--Timer补充",主要涉及到Java多线程--Timer补充方面的内容,对于Java多线程--Timer补充感兴趣的同学可以参考一下。

Timer补充 【在Timer初识中,小K给我们展示了一个定时器的应用,小K是个恐怖主义和保守主义的结合着,初衷是整炸弹的,结果由于能力不足,整成鞭炮,最后由于保守也不敢去干维护社会秩序的事,经过一番醒悟,小K改名为小钟,重出江湖,但这次他带着自己的小发明“闹钟”穿越到了盛唐时代来推销他的闹钟...】 小钟二话不说,拿出他的代码说明书: timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { Date alarmTime = new GregorianCalendar().getTime(); System.out.println("【" + alarmTime + "】It' time to get up..."); } }, new Date(), 24 * 60 * 60 * 100); // 间隔一天【大家一看楞住了,这么简单,能用吗???于是有人抱着试试带头买了,但是有个限制,一旦买了之后,闹钟的时间是不能修改的,比如说谁要几点的,谁要几点的都要提前说好,小钟拿着票子飘然而去,打道回府继续修炼...】 【一个月的时间过去了,当初买了闹钟的哥们发现了这个闹钟的缺点,议论纷纷要找到小钟看看有木有新的发明,正在这时,只见小钟满面春风得走到人群中。】 小钟:各位父老乡亲,很烦一个月前买的那个闹钟了,有木有?我这次出来唯一的目的是解决你们的烦恼的,我的发明有了重大的进步,每个人都有机会来与我共享,嗯...嗯...当然你们需要给我点辛苦费和研究经费噢,下面是我的重要改进: 【小钟给自己好好冲了一次电,将Java的面向对象好好利用了一把,但是好像还不是很娴熟...】 闹铃驱动类:AlarmDriver public class AlarmDriver { private Date firstTime; public AlarmDriver(Date firstTime) { this.firstTime = firstTime; } public void alarm() { Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { System.out.println("【" + firstTime + "】It' time to get up..."); } }, firstTime, AlarmClock.DAY_PREIOD); // 间隔一天 } }【这是一个闹钟的设置单元,小钟从包里掏出一个玩意儿,上面有个小屏幕和几个按钮~】 /** * 闹钟类,可以实现多个时间点闹铃 * * @author ysjian * @version 1.0 * @email [email protected] * @QQ 646633781 * @telephone 18192235667 * @csdnBlog http://blog.csdn.net/ysjian_pingcx * @createTime 2014-2-10 * @copyRight Merit */ public class AlarmClock { /** 一天时间的间隔毫秒数 */ public static final long DAY_PREIOD = 24 * 60 * 60 * 1000; private List<AlarmDriver> drivers = new ArrayList<>(); /** * 添加闹铃驱动器 * * @param driver */ public void addAlarm(AlarmDriver driver) { drivers.add(driver); } /** * 移除闹铃驱动器 * * @param driver */ public void removeAlarm(AlarmDriver driver) { drivers.remove(driver); } /** * 清除闹铃驱动器 * */ public void clearAlarm() { drivers.clear(); } /** * 设置闹铃,提供用户时间输入接口 * * @param firstTime * 第一次响铃时间 */ public void alarm(Date firstTime) { alarm(firstTime, DAY_PREIOD); } private void alarm(Date firstTime, long period) { for (AlarmDriver driver : drivers) { driver.alarm(); } } }【众位父老乡亲一脸期盼的表情看着小钟,格外的安静!】 【小钟对着众位巴拉巴拉起闹钟上的按钮,经过不到一分钟的时间,简易的操作把父老乡亲的疑惑从脸上移除,顿时一包的闹钟一枪而空,小钟跑到一边点钱开来,显然丰收了...】 【天黑了,小钟回到自己小窝里突然沉思了:我的闹钟一旦设置就会隔一天响一次,如果明天想睡个懒觉不想让它闹铃,这个可是很重要的功能啊,沉思中,小钟拿起草稿纸,显然是在写功能代码】 第一版草稿,通过自定义一个TimerTask,在run方法中调用启动一个定时器,传入一个新的对象,但是间隔已经改变 public class IntevalAlarm { public static void main(String[] args) { AlarmTask task = new IntevalAlarm().new AlarmTask(); new Timer().schedule(task, 2000); } private static int count = 1; class AlarmTask extends TimerTask { @Override public void run() { count = (count + 1) % 3; System.out.println("alarming..."); // 循环启动,分别相隔2秒或4秒启动一个新的定时器 new Timer().schedule(new AlarmTask(), 2000 + 2000 * count); } } }【小钟面露喜色,继续挥动着手,十分钟后...】 第二版草稿,通过两个定时任务来互相调用: public class IntevalAlarm2 { public static void main(String[] args) { IntevalAlarm2 alarm = new IntevalAlarm2(); new Timer().schedule(alarm.new AlarmTask1(), 2000); } // 下面是两个不同的定时器实现不同间隔的定时任务 class AlarmTask1 extends TimerTask { @Override public void run() { System.out.println("alarming..."); new Timer().schedule(new AlarmTask2(), 2000); } } class AlarmTask2 extends TimerTask { @Override public void run() { System.out.println("alarming..."); new Timer().schedule(new AlarmTask1(), 4000); } } }【不到半个小时的时间,小钟就拟出两版代码,可是他好像陷入更深沉的沉思,实在想怎么把这个嵌入到闹钟里面去吗?这或许成了一个永久的迷。】

上一篇:Android应用如何反馈Crash报告
下一篇:HDU1228

相关文章

相关评论