大家好,感谢您提前投入的时间!
我有一个问题,我不知道如何在 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/