像下面的链接一样,是否存在线程中断异步队列并置于警报状态的java函数?
我想在Java中使异步计时器功能。我检查了它在C ++中是否可以工作。但是我不知道它是否在Java中。 当主线程运行并定期检查是否触发了异步计时器并运行它,然后返回并再次运行。那就是我想做的。 当然,当检查异步计时器已触发时,我将使用可警报的睡眠方式。
我试图在Google中找到它,但没有找到。 预先感谢!
我想做的更多细节如下。
让我们假设有一个程序会收到类似:
的请求msg1 : msgname=aa1 to=sub1 waittime=1000 msgbody
msg2 : msgname=aa2 to=sub2 waittime=2000 msgbody
msg3 : msgname=aa3 to=sub1 waittime=3000 msgbody
msg4 : msgname=aa3 to=sub1 msgbody . .
,程序应将每个msg传递给msg的to字段中描述的sub1和sub2。
如果存在waittime,它将在以后的毫秒级传递消息。程序应该在1个线程中执行此操作,并且在一秒钟内超过1万个msg。如果仅使用同步睡眠,则所有消息都不会经过一段时间而延迟。我检查了它在C ++代码中是否能很好地工作,并且我已经看到用Java(也许)制作的商业程序可以做到这一点。但是我是Java的新手,我想知道在Java中是可能的。
答案 0 :(得分:3)
Java没有类似于Windows的“ alertable”和APC队列的概念,并且我怀疑是否可以同时使用Windows本机API和将它们与普通Java线程集成行为。
在Java中实现计时器的简单方法是使用标准的Timer
类。请参阅javadoc。如果这对您不起作用,请更详细地说明您的问题。
针对您的后续问题:是的,在Java中是可能的。事实上。可能有很多方法可以做到。但是Timer
和TimerTask
都是很好的方法。像这样:
public class MyTask extends TimerTask {
private String msg;
private String to;
public Mytask(String msg, String to) {
this.msg = msg;
this.to = to;
}
public void run() {
// process message
}
}
Timer timer = new Timer();
while (...) {
// read message
timer.schedule(new MyTask(msg, to), waitTime);
}