【发布时间】:2016-11-08 18:03:17
【问题描述】:
无论之前的任务是否结束,我都想每隔 1 秒定期运行一次任务。我尝试了下面的代码,但它没有工作它正在等待 完成上一个任务然后开始另一个任务。
public static void main(String[] args) throws Exception {
ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(5);
scheduledPool.scheduleAtFixedRate(new Runnable(){
public void run(){
System.out.println(Thread.currentThread().getName() + "startTime : "+ new Date());
sleepForNSeconds(5);
System.out.println(Thread.currentThread().getName() +"endTime : "+ new Date());
}
}, 0,1, TimeUnit.SECONDS);
}
输出:
pool-1-thread-1startTime : Wed Jul 06 21:04:15 IST 2016
pool-1-thread-1endTime : Wed Jul 06 21:04:21 IST 2016
pool-1-thread-1startTime : Wed Jul 06 21:04:21 IST 2016
pool-1-thread-1endTime : Wed Jul 06 21:04:26 IST 2016
pool-1-thread-2startTime : Wed Jul 06 21:04:26 IST 2016
请建议我应该使用哪个 api 来实现这一点。我希望 startTime 应该每 1 秒打印一次,无论它是否完成。
如果 coreSize 为 5,那么当 5 个线程已经在工作时,如果需要,ScheduledExecutorService 可以创建多少个新线程?
注意:我也尝试了 Timer 类的 scheduleAtFixedRate api,但这也不能解决我的目的。
【问题讨论】:
标签: java multithreading threadpool