gpt4 book ai didi

java - 如何处理 Java 事件队列

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:57 25 4
gpt4 key购买 nike

大家好,感谢您提前投入的时间!

我有一个问题,我不知道如何在 Java 中解决。假设我有一个用户界面,它创建必须在未来特定时间“执行”的事件,该时间可能从 future 几分钟到几天不等。

我想创建一个实现 Runnable 的类(比方说 EventHandler),然后创建一个 ConcurrentLinkedList 来存储这些实例化,按它们应该执行的时间排序,从最早到最提前。之后,一个线程查看队列,如果系统时间大于预期执行时间,则启动该进程。

除了与列表相关的并发问题之外,问题还在于 peek 线程会消耗 CPU 时间。所以我想知道是否有一个更优雅的解决方案,考虑到在一秒的时间间隔内可能安排数百个事件。另外,我正在使用 Hibernate 和 MongoDb 来存储内容(如果这有影响的话)。

谢谢!

编辑:我对您可能想到的所有其他解决方案持开放态度,只要它解决“排队事件并在设置的时间执行它们”

最佳答案

一个简单的方法是使用 ScheduledThreadPoolExecutor .

int corePoolSize = 1;// for sequential execution of tasks
// for parallel execution use Runtime.getRuntime().availableProcessors();

ScheduledThreadPoolExecutor executor = ScheduledThreadPoolExecutor(corePoolSize);
...
Runnable command1 = ...
executor.schedule(command1, 2, TimeUnit.MINUTES); // execute in couple of minutes
Runnable command2 = ...
executor.schedule(command2, 7, TimeUnit.DAYS); // execute in 7 days

关于java - 如何处理 Java 事件队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55191871/

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