我正在尝试为Nashorn (Java 8)编写事件循环,以便来自异步操作 (我启动的线程,例如连接到远程服务或执行长时间运算的线程) 的回调将被放入队列中并按顺序 (而不是并行) 执行。我通过将回调函数放在ConcurrentLinkedQueue上,并使用ScheduledExecutorService作为检查队列以执行回调的循环来实现它。
这个方法很好用,但我的问题是:
1)我可以使用多短的间隔而不会拖慢CPU?我将运行多个此类线程,并且它们必须彼此独立。因此,可能有50个线程都在运行它们自己的“事件循环”。例如,此执行程序会尝试每10毫秒运行一次可运行资源...
这个方法很好用,但我的问题是:
1)我可以使用多短的间隔而不会拖慢CPU?我将运行多个此类线程,并且它们必须彼此独立。因此,可能有50个线程都在运行它们自己的“事件循环”。例如,此执行程序会尝试每10毫秒运行一次可运行资源...
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(<cbRunnable>, 0, 10, TimeUnit.MILLISECONDS);
2) 这种方法是否比以下方式更具优势:
while (true) {
// check queue and execute any callback...
}
3) 有更好的方法吗?