大家好,感谢您提前投入的时间!
我有一个问题我不确定如何在Java中使用。假设我有一个用户界面,可以创建必须在将来的特定时间“执行”的事件,这可能会在未来几分钟到几天之间变化。
我创建了一个实现Runnable的类(比如说EventHandler),然后创建了一个ConcurrentLinkedList,它存储了那些应该执行它们的实例化,至少事先提前到大多数实例。之后,一个查看队列的线程,如果系统时间大于预期的执行时间,则启动该进程。
问题是,除了与list相关的并发问题之外,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