javaweb,监听器和定时器(Quartz)互相调控的问题

最近写了一个系统(javaweb),用到了监听器和定时器(Quartz)。开发过程中,有以下需求。1,监听器在程序启动的时候启动,监听器负责处理表A,如果表A有记录就处理... 最近写了一个系统(javaweb),用到了监听器和定时器(Quartz)。
开发过程中,有以下需求。
1,监听器在程序启动的时候启动,监听器负责处理表A,如果表A有记录就处理,并删除。没有记录就等待5秒。
2,监听器在处理表A之前,需要判断一下定时器是否启动,如果启动,监听器进入等待。直到定时器完成任务,才停止等待。
3,定时器启动时,需要判断一下,A表中是否有未处理完的数据,如果有,定时器延迟启动,等待监听器的处理。

如何在程序中判断 定时器当前的状态。
如何让定时器延时启动。

求大神 解答。回答的时候详细一点。
展开
 我来答
fuhaiwei
2014-08-23 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1387万
展开全部
public class Listener {
public static Object lock = new Object();
public void run() {
while (true) {
synchronized (Listener.lock) {
if (hasData()) {
//do check data
}
nodifyForLock();
}
threadSleep();
}
}

public static boolean hasData() {
// return has data
}

public static void threadSleep() {
//sleep 5 second
}

private void nodifyForLock() {
Listener.lock.notify();
}
}

public class Quartz {
public void run() {
synchronized (Listener.lock) {
if (Listener.hasData()) {
waitForLock();
}
//do quartz
}
}

private void waitForLock() {
try {
Listener.lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


使用同步锁机制,确保监听器和定时器不会同时运行。

使用Wait Nodify机制,确保有数据时定时器会等待,直到数据处理完成。

QQMSD8
2014-08-23 · 知道合伙人软件行家
QQMSD8
知道合伙人软件行家
采纳数:6788 获赞数:13239
没有做不到,只有想不到,帮助别人的同时也是对自己的提升

向TA提问 私信TA
展开全部
不明白你为什么要这样设计程序
通常情况下监听器只是用来启动定时器,剩下的工作都是让定时器去处理
因为你想,你的定时器怎么启动起来的?
肯定是交给监听器去启动,例如servlet监听器,servlet容器一创建就执行,也就是服务器一启动就执行,这个时候你在监听器里开启一个定时器就做事就行了

接下来就是让你的定时器去定时 定时5秒去查询表A有没有数据如果有就处理就行了
定时器本身就是定时执行,因此不需要延时启动了

纯手工打字的,请采纳哈
追问
恩对,程序启动时启动定时器,不过这个定时器是每天0点执行任务。
我想在它执行任务之前,判断一下队列表中是否有未处理的记录。
如果有,定时器任务就延时执行。等监听器处理完后,再执行。
我想做这个需求。
追答
那你就判断如果没有任务,那你就把当前这个定时器取消掉 调用cancel();
重新创建一个定时器,创建定时器的时候是可以指定延迟执行的
java.util.Timer.schedule(task, delay, period);
task 就是定时器实例
delay就是延迟时间
period就是间格时间
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式