- 浏览: 27787 次
- 性别:
- 来自: 武汉
-
文章分类
最新评论
这里选了一段TimerThread 的代码:任务第一次执行完之后,会等待一个时间周期(下次执行时间-当前时间)。这样就存在一个情况,修改系统时间为下次执行时间前几分钟/秒钟,是不能达到预期效果的。
private void mainLoop() {
while (true) {
try {
TimerTask task;
boolean taskFired;
synchronized(queue) {
// Wait for queue to become non-empty
while (queue.isEmpty() && newTasksMayBeScheduled)
queue.wait();
if (queue.isEmpty())
break; // Queue is empty and will forever remain; die
// Queue nonempty; look at first evt and do the right thing
long currentTime, executionTime;
task = queue.getMin();
synchronized(task.lock) {
if (task.state == TimerTask.CANCELLED) {
queue.removeMin();
continue; // No action required, poll queue again
}
currentTime = System.currentTimeMillis();
executionTime = task.nextExecutionTime;
if (taskFired = (executionTime<=currentTime)) {
if (task.period == 0) { // Non-repeating, remove
queue.removeMin();
task.state = TimerTask.EXECUTED;
} else { // Repeating task, reschedule
queue.rescheduleMin(
task.period<0 ? currentTime - task.period
: executionTime + task.period);
}
}
}
if (!taskFired) // Task hasn't yet fired; wait
queue.wait(executionTime - currentTime);
}
if (taskFired) // Task fired; run it, holding no locks
task.run();
} catch(InterruptedException e) {
}
}
}
private void mainLoop() {
while (true) {
try {
TimerTask task;
boolean taskFired;
synchronized(queue) {
// Wait for queue to become non-empty
while (queue.isEmpty() && newTasksMayBeScheduled)
queue.wait();
if (queue.isEmpty())
break; // Queue is empty and will forever remain; die
// Queue nonempty; look at first evt and do the right thing
long currentTime, executionTime;
task = queue.getMin();
synchronized(task.lock) {
if (task.state == TimerTask.CANCELLED) {
queue.removeMin();
continue; // No action required, poll queue again
}
currentTime = System.currentTimeMillis();
executionTime = task.nextExecutionTime;
if (taskFired = (executionTime<=currentTime)) {
if (task.period == 0) { // Non-repeating, remove
queue.removeMin();
task.state = TimerTask.EXECUTED;
} else { // Repeating task, reschedule
queue.rescheduleMin(
task.period<0 ? currentTime - task.period
: executionTime + task.period);
}
}
}
if (!taskFired) // Task hasn't yet fired; wait
queue.wait(executionTime - currentTime);
}
if (taskFired) // Task fired; run it, holding no locks
task.run();
} catch(InterruptedException e) {
}
}
}
- 世界十大狙击手排名.zip (4.6 KB)
- 下载次数: 0
发表评论
-
生活学习
2012-03-24 16:33 879不要评价别人容貌,因为他不靠你吃饭; 不要评价别人的德行,因 ... -
相关序列号
2012-02-15 10:35 0=============================== ... -
html相关(2)
2011-12-08 14:59 0<img style="display:no ... -
html相关(1)
2011-12-08 14:58 0<pre> 获取左边frame中inputValu ... -
Unicode和UTF系列(6)
2011-12-08 14:07 0Base64 介绍之前,先给一段"乱 ... -
Unicode和UTF系列(5)
2011-12-08 14:20 820ASCII和ISO 8859-1 ISO 88 ... -
Unicode和UTF系列(4)
2011-12-08 14:20 834如果说GB2312、GBK是ANSI时代的产物,为什么如今还需 ... -
Unicode和UTF系列(3)
2011-12-08 14:19 801GB2312、GBK和 GB18030 简单来 ... -
Unicode和UTF系列(2)
2011-12-08 14:19 807UFT-8 UTF-8采用的是变长码的方式,其 ... -
Unicode和UTF系列(1)
2011-12-08 14:18 1134Unicode和UTF系列 Unicode ... -
编码简史
2011-12-08 13:57 0编码简史 在讲各种编码之前,有必要先讲一个编 ... -
字符和字节
2011-12-08 13:56 0字节和字符 字节(octet):顾其英文名而思 ... -
字符编码(3)
2011-12-08 13:54 0通用转换格式UTF(Universal Transformat ... -
字符编码(2)
2011-12-08 13:54 0简单的说 UTF-8包含了很多世界范围内的语言编码(相当于一个 ... -
字符编码(1)
2011-12-08 13:53 0UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛 ... -
聊天软件
2011-11-21 21:58 494FreeEIM -
碱性食物
2011-10-25 09:25 854附录:常见食物的酸碱性 1.强酸性食品:蛋黄、奶酪、白糖做 ...
相关推荐
`Timer`类是Java中用于实现定时任务调度的一个基础工具,它位于`java.util`包中。在本文中,我们将深入探讨`Timer`类的基本使用和示例,帮助你理解如何在Java程序中实现简单的定时任务。 首先,`Timer`类提供了计划...
Progress 4GL 是一种面向对象的编程语言,广泛用于开发企业级应用程序,它提供了一个内置的 Timer 控件,可以用来执行定时任务。 在 PowerBuilder 应用程序中,Timer 控件是非常有用的,它可以周期性地触发事件,如...
PB9多Timer事件实例是PowerBuilder 9.0中关于定时器(Timer)使用...同时,这个实例也能帮助开发者解决实际项目中涉及定时任务的复杂场景,比如实现多个定时任务的并行处理,或者按照不同时间间隔执行不同任务的需求。
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...
在互联网技术飞速发展的今天,定时任务在网站和应用中扮演了重要的角色。它们可以帮助开发者自动化处理定期任务,例如数据备份、内容更新、系统维护等。PHP作为一种广泛使用的服务器端脚本语言,其定时任务的实现...
ThinkPHP是一个广受欢迎的PHP框架,而"tp(worder_timer)定时任务,访问url_thinkphp_定时任务_TP_"则涉及到在ThinkPHP框架下实现定时任务的功能。下面我们将详细探讨这个主题。 一、ThinkPHP框架 ThinkPHP(简称TP...
### Java里timer执行定时任务 #### 一、延时执行 在Java中,`java.util.Timer` 类提供了创建和管理定时任务的功能。如果需要在特定时间之后执行某个任务,可以利用 `Timer` 类的 `schedule()` 方法。此方法接受一...
Java 定时任务是指在 Java 语言中实现的定时执行任务的机制,通过使用 Timer 和 TimerTask 两个类,可以实现定时执行任务的功能。在这个例子中,我们将实现每天定时执行任务的功能,具体来说,就是在每天的凌晨 2 点...
在【标题】"Spring的定时任务开发及对Quartz和Timer支持"中,涉及到的是Spring在处理定时任务方面的特性,这在企业级应用中非常常见,用于执行一些周期性的后台任务,如数据同步、报表生成、清理任务等。 首先,...
在IT领域,尤其是在软件开发中,定时任务是一个非常常见的需求,它允许程序按照预定的时间间隔执行特定的操作。本文将深入探讨如何使用C#语言来实现一个自定义的定时任务系统,支持多任务运行,以便更好地满足开发中...
在Java中,我们可以利用`java.util.Timer`类和`java.util.TimerTask`类来实现简单的定时任务,但这种实现方式存在线程安全问题。在Web应用中,我们可以利用Servlet容器提供的特性来更优雅地处理定时任务,这就是描述...
Spring提供了多种方式来实现定时任务,其中之一就是使用`Timer`。`Timer`接口源自Java标准库,但在Spring中,我们可以结合它来创建更加灵活的定时任务。本教程将详细介绍如何在Spring中使用`Timer`来实现能精确到几...
"Timer自动任务计划工具"是一款高效且功能丰富的替代Windows自带定时任务管理器的软件。它旨在提供更便捷、更强大的任务调度能力,帮助用户自动化执行各种日常任务,从而提高工作效率和减轻工作负担。 该工具的核心...
在Java中,`java.util.Timer`类是实现定时任务的一个常见工具,这就是描述中提到的"通过timer 的定时任务"。`Timer`类提供了定时执行任务的能力,可以安排任务在未来某一时刻或按照一定周期执行。使用`Timer`类,你...
在本实践案例中,我们将深入探讨如何在Qt环境中利用QTimer类来实现定时器功能。QTimer是Qt库中的一个核心组件,它提供了一种...QTimer的灵活性使得它可以适应各种定时需求,无论是简单的单次触发还是复杂的周期性任务。
C# 用Timer实现定时任务程序 初学者参考使用
在Java中,Timer类是一个非常有用的工具类,它可以帮助我们实现定时任务的执行。在本篇文章中,我们将学习如何使用Java Timer来实现每天凌晨1点执行任务的功能。 首先,让我们了解一下 Timer类的基本概念。Timer类...
它允许用户根据自身需求设置多组定时任务,包括开机、关机、休眠、重启等不同操作。只需选择相应的操作类型,设定具体的时间,就可以轻松创建定时任务。此外,软件还支持循环定时,比如每天固定时间执行某项操作,极...
"C#定时任务winform"是指使用C#语言构建的基于Windows Forms(WinForm)的应用程序,该应用具有定时执行任务的功能。这通常涉及到System.Timers.Timer或System.Threading.Timer类的使用,它们允许开发者在特定时间...