gpt4 book ai didi

java - 是否有java线程中断异步队列并放入alertable?

转载 作者:行者123 更新时间:2023-12-01 19:44:50 25 4
gpt4 key购买 nike

像下面的链接一样,是否有线程中断异步队列并放入可警报的java函数?

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

我想在java中制作异步定时器功能。我检查过它在 C++ 中是否有效。但我不知道它是否是java中的。当主线程运行时,定期检查是否有异步计时器触发并运行它,然后返回并再次运行。这就是我想做的。当然,当检查异步计时器触发时,我将使用 sleep 和alertable。

我试图在谷歌上找到它,但没有找到。提前致谢!

我想要做的更多细节如下。

假设有一个程序接收如下请求:

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's to 字段中描述的 sub1、sub2。

如果存在 waittime,则应在 waittime 毫秒后传递消息。该程序应该在 1 个线程中执行此操作,并且一秒钟内有超过 10,000 个消息。如果仅使用同步 sleep ,则所有消息不会一次传递并延迟。我检查它在 C++ 代码中运行良好,并且我见过用 java 编写的商业程序(也许)可以做到这一点。但我是java新手,我想知道这在java中是可能的。

最佳答案

Java 没有类似于 Windows 的“alertable”和 APC 队列的概念,我怀疑是否可以同时使用 Windows native API 并将其与普通 Java 线程集成行为。

在 Java 中实现计时器的简单方法是使用标准的 Timer 类;请参阅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);
}

关于java - 是否有java线程中断异步队列并放入alertable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53787825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com