【发布时间】:2018-09-10 18:50:08
【问题描述】:
我有 2 个任务 t1 和 t2。我应该如何安排他们。两者都有自己的延迟{d1,d2}和周期{p1,p2}。
方法一:
我应该使用
ScheduledExecutorService ser = Executors.newScheduledThreadPool(2);
ser.scheduleAtFixedRate(t1, 1, 3, TimeUnit.SECONDS);
ser.scheduleAtFixedRate(t2, 2, 5, TimeUnit.SECONDS);
这里我使用了大小为 2 的线程池。所以这两个任务可以并行运行。但是如果一个任务不会运行,线程就会处于空闲状态。
如果我将线程池大小设为 1。一次只能运行一个任务。
方法二:
ScheduledExecutorService ser1 = Executors.newScheduledThreadPool(1);
ScheduledExecutorService ser2 = Executors.newScheduledThreadPool(1);
ser1.scheduleAtFixedRate(t1, 1, 3, TimeUnit.SECONDS);
ser2.scheduleAtFixedRate(t2, 2, 5, TimeUnit.SECONDS);
这里我为每个任务使用了 2 个 ScheduledExecutorService。
这两种方法的内部差异/优势-劣势是什么?
【问题讨论】:
-
使用两个线程池可以获得什么?
-
@John Kane 是的,这就是我想了解的内部结构。会有什么不同。
标签: java scheduledexecutorservice executors