【发布时间】:2014-01-29 16:23:32
【问题描述】:
我的要求是提供一项服务,在特定时间间隔后继续检查队列并处理队列中的元素。
对于 10 秒后的调度任务,我使用的是:
ScheduledExecutorService schd = Executors.newSingleThreadScheduledExecutor();
schd.scheduleAtFixedRate(readQueueRunnable, 10, 10, TimeUnit.SECONDS);
我的问题是假设第一次,队列中有很多元素,我的单线程开始处理队列。
即使在 10 秒后,我的第一个线程仍在执行它。
所以当 10 秒后再次调用 runnable 时,它会停止前一个正在执行的线程并启动新的线程吗? 或者,它将检查线程是否已经在运行,如果它正在运行,那么在这种情况下它将跳过进入 Runnable。
【问题讨论】:
-
调度队列检查听起来很奇怪,我只想在专用的消费者线程中使用BlockingQueue#poll(timeout)