如何处理Java事件队列

问题描述 投票:1回答:1

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

我有一个问题我不确定如何在Java中使用。假设我有一个用户界面,可以创建必须在将来的特定时间“执行”的事件,这可能会在未来几分钟到几天之间变化。

我创建了一个实现Runnable的类(比如说EventHandler),然后创建了一个ConcurrentLinkedList,它存储了那些应该执行它们的实例化,至少事先提前到大多数实例。之后,一个查看队列的线程,如果系统时间大于预期的执行时间,则启动该进程。

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

谢谢!

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

java events concurrency event-loop
1个回答
0
投票

一个简单的方法是使用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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.