java - 如何处理 Java 事件队列

标签 java events concurrency event-loop

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

我有一个问题,我不知道如何在 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/

相关文章:

java - 在线程之间传递一组对象

web-applications - 对于成千上万人使用但相同数据仅由其中一些人访问的 Web 应用程序来说,Node.js 是一个不错的选择吗

java - 使用 Luhn 算法检查信用卡有效性

java - 将堆大小增加至 6GB

Mac 上 Java 安装失败

java - 我在 eclipse 中收到错误,提示 Jar 中缺少一个类,并且该类不是 JAR ,在这种情况下可以做什么?

JavaScript:DOM 加载事件、执行顺序和 $(document).ready()

Javascript - 如何访问事件函数中的对象属性?

java - 有没有办法强制 parallelStream() 并行?

ios - 如何同步两个 NSURLSessionDataTasks?