}
运行结果:
倒计时十秒,火箭1等待发射!
倒计时十秒,火箭2等待发射!
倒计时十秒,火箭3等待发射!
倒计时十秒,火箭4等待发射!
#0(10)
#2(10)
#3(10)
#1(10)
#0(9)
#1(9)
#3(9)
#2(9)
#0(8)
#2(8)
#3(8)
#1(8)
#0(7)
#2(7)
#3(7)
#1(7)
#0(6)
#1(6)
#2(6)
#3(6)
#0(5)
#3(5)
#2(5)
#1(5)
#0(4)
#2(4)
#3(4)
#1(4)
#0(3)
#1(3)
#2(3)
#3(3)
#0(2)
#3(2)
#2(2)
#1(2)
#0(1)
#1(1)
#2(1)
#3(1)
#0(发射!)
#1(发射!)
#2(发射!)
#3(发射!)
newCachedThreadPool 将为每个任务都创建一个线程!
shutdown()方法可以防止新任务被提交给这个Executor,这个要放在execute()方法提交所有任务之后
newCachedThreadPool 替换为newFixedThreadPool
newFixedThreadPool使用了有限的线程集来执行所提交的任务
ExecutorService t = Executors.newFixedThreadPool(4);
4个线程:
如果是0 报错
如果是1 只能按照顺序一个一个来
如果是2 两个两个一起来
如果是3 先执行3个,最后一个第二批执行
如果是4 全部执行
newSingleThreadExecutor就像是数量为1的newFixedThreadPool
ExecutorService t = Executors.newSingleThreadExecutor();
只能按照顺序一个一个来
运行结果:
倒计时十秒,火箭1等待发射!
倒计时十秒,火箭2等待发射!
倒计时十秒,火箭3等待发射!
倒计时十秒,火箭4等待发射!
#0(10)
#0(9)
#0(8)
#0(7)
#0(6)
#0(5)
#0(4)
#0(3)
#0(2)
#0(1)
#0(发射!)
#1(10)
#1(9)
#1(8)
#1(7)
#1(6)
#1(5)
#1(4)
#1(3)
#1(2)
#1(1)
#1(发射!)
#2(10)
#2(9)
#2(8)
#2(7)
#2(6)
#2(5)
#2(4)
#2(3)
#2(2)
#2(1)
#2(发射!)
#3(10)
#3(9)
#3(8)
#3(7)
#3(6)
#3(5)
#3(4)
#3(3)
#3(2)
#3(1)
#3(发射!)