有没有java线程中断异步队列放入alertable?

is there java thread interrupt asynchronous queue and put in alertable?

如下link,有没有java线程中断异步队列放入alertable的函数?

https://docs.microsoft.com/en-us/windows/desktop/sync/using-a-waitable-timer-with-an-asynchronous-procedure-call

我想在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 中是可能的。实际上。可能有很多方法可以做到这一点。但是 TimerTimerTask 是一个很好的方法。像这样:

   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);
   }