有没有java线程中断异步队列放入alertable?
is there java thread interrupt asynchronous queue and put in alertable?
如下link,有没有java线程中断异步队列放入alertable的函数?
我想在java中实现异步定时器功能。我检查过它在 C++ 中有效。但是不知道是不是在java里。
当主线程 运行 并定期检查是否触发了异步计时器并 运行 它并返回并再次 运行 时。这就是我想做的。
当然,当检查异步定时器触发时,我会使用 sleep with alertable。
我试图在 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 字段中描述的 sub1、sub2。
如果存在 waittime,它应该在 waittime 毫秒后传递消息。该程序应该在 1 个线程中执行此操作,并且一秒钟内有超过 10,000 条消息。如果只使用同步睡眠,所有消息都不会在一段时间内传递并延迟。我检查它在 C++ 代码中运行良好,并且我已经看到 java(也许)制作的商业程序可以做到这一点。但我是 java 的新手,我想知道在 java.
中是否可行
Java 没有类似于 Windows' "alertable" 和 APC 队列的概念,我怀疑是否可以同时使用 Windows本机 API 和 将其与正常 Java 线程行为集成。
在Java中实现定时器的简单方法是使用标准Timer
class;见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);
}
如下link,有没有java线程中断异步队列放入alertable的函数?
我想在java中实现异步定时器功能。我检查过它在 C++ 中有效。但是不知道是不是在java里。 当主线程 运行 并定期检查是否触发了异步计时器并 运行 它并返回并再次 运行 时。这就是我想做的。 当然,当检查异步定时器触发时,我会使用 sleep with alertable。
我试图在 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 字段中描述的 sub1、sub2。
如果存在 waittime,它应该在 waittime 毫秒后传递消息。该程序应该在 1 个线程中执行此操作,并且一秒钟内有超过 10,000 条消息。如果只使用同步睡眠,所有消息都不会在一段时间内传递并延迟。我检查它在 C++ 代码中运行良好,并且我已经看到 java(也许)制作的商业程序可以做到这一点。但我是 java 的新手,我想知道在 java.
中是否可行Java 没有类似于 Windows' "alertable" 和 APC 队列的概念,我怀疑是否可以同时使用 Windows本机 API 和 将其与正常 Java 线程行为集成。
在Java中实现定时器的简单方法是使用标准Timer
class;见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);
}