Java线程(六):线程池,android移动应用开发试题

  1. final int taskID = i;

  2. threadPool.execute(new Runnable() {

  3. public void run() {

  4. for(int i = 1; i < 5; i++) {

  5. try {

  6. Thread.sleep(20);// 为了测试出效果,让每次任务执行都需要一定时间

  7. } catch (InterruptedException e) {

  8. e.printStackTrace();

  9. }

  10. System.out.println(“第” + taskID + “次任务的第” + i + “次执行”);

  11. }

  12. }

  13. });

  14. }

  15. threadPool.shutdown();// 任务执行完毕,关闭线程池

  16. }

  17. }

输出结果:

[java]  view plain copy print ?

  1. 第1次任务的第1次执行

  2. 第2次任务的第1次执行

  3. 第3次任务的第1次执行

  4. 第2次任务的第2次执行

  5. 第3次任务的第2次执行

  6. 第1次任务的第2次执行

  7. 第3次任务的第3次执行

  8. 第1次任务的第3次执行

  9. 第2次任务的第3次执行

  10. 第3次任务的第4次执行

  11. 第2次任务的第4次执行

  12. 第1次任务的第4次执行

  13. 第4次任务的第1次执行

  14. 第4次任务的第2次执行

  15. 第4次任务的第3次执行

  16. 第4次任务的第4次执行

上段代码中,创建了一个固定大小的线程池,容量为3,然后循环执行了4个任务,由输出结果可以看到,前3个任务首先执行完,然后空闲下来的线程去执行第4个任务,在FixedThreadPool中,有一个固定大小的池,如果当前需要执行的任务超过了池大小,那么多于的任务等待状态,直到有空闲下来的线程执行任务,而当执行的任务
小于池大小,空闲的线程也不会去销毁。

  1. CachedThreadPool

上段代码其它地方不变,将newFixedThreadPool方法换成newCachedThreadPool方法。

输出结果:

[java]  view plain copy print ?

  1. 第3次任务的第1次执行

  2. 第4次任务的第1次执行

  3. 第1次任务的第1次执行

  4. 第2次任务的第1次执行

  5. 第4次任务的第2次执行

  6. 第3次任务的第2次执行

  7. 第2次任务的第2次执行

  8. 第1次任务的第2次执行

  9. 第2次任务的第3次执行

  10. 第3次任务的第3次执行

  11. 第1次任务的第3次执行

  12. 第4次任务的第3次执行

  13. 第2次任务的第4次执行

  14. 第4次任务的第4次执行

  15. 第3次任务的第4次执行

  16. 第1次任务的第4次执行

可见,4个任务是交替执行的,CachedThreadPool会创建一个缓存区,将初始化的线程缓存起来,如果线程有可用的,就使用之前创建好的线程,如果没有可用的,就新创建线程,终止并且从缓存中移除已有60秒未被使用的线程。

  1. SingleThreadExecutor

上段代码其它地方不变,将newFixedThreadPool方法换成newSingleThreadExecutor方法。

输出结果:

[java]  view plain copy print ?

  1. 第1次任务的第1次执行

  2. 第1次任务的第2次执行

  3. 第1次任务的第3次执行

  4. 第1次任务的第4次执行

  5. 第2次任务的第1次执行

  6. 第2次任务的第2次执行

  7. 第2次任务的第3次执行

  8. 第2次任务的第4次执行

  9. 第3次任务的第1次执行

  10. 第3次任务的第2次执行

  11. 第3次任务的第3次执行

  12. 第3次任务的第4次执行

  13. 第4次任务的第1次执行

  14. 第4次任务的第2次执行

  15. 第4次任务的第3次执行

  16. 第4次任务的第4次执行

4个任务是顺序执行的,SingleThreadExecutor得到的是一个单个的线程,这个线程会保证你的任务执行完成,如果当前线程意外终止,会创建一个新线程继续执行任务,这和我们直接创建线程 不同,也和newFixedThreadPool(1)不同。

4.ScheduledThreadPool

  1. 第4次任务的第4次执行

4个任务是顺序执行的,SingleThreadExecutor得到的是一个单个的线程,这个线程会保证你的任务执行完成,如果当前线程意外终止,会创建一个新线程继续执行任务,这和我们直接创建线程 不同,也和newFixedThreadPool(1)不同。

4.ScheduledThreadPool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值