- package com.nankang.test.thread;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.LinkedBlockingQueue;
- import java.util.concurrent.ThreadPoolExecutor;
- import java.util.concurrent.TimeUnit;
- /**
- *
- * @author qianguangtao
- * 第2次任务的第1次执行
- * 第1次任务的第1次执行
- * 第3次任务的第1次执行
- * 第2次任务的第2次执行
- * 第3次任务的第2次执行
- * 第1次任务的第2次执行
- * 第2次任务的第3次执行
- * 第1次任务的第3次执行
- * 第3次任务的第3次执行
- * 第2次任务的第4次执行
- * 第3次任务的第4次执行
- * 第1次任务的第4次执行
- * 第4次任务的第1次执行
- * 第4次任务的第2次执行
- * 第4次任务的第3次执行
- * 第4次任务的第4次执行
- */
- public class TestFixedPool {
- public static void main(String[] args) {
- // ThreadPoolExecutor threadPool = (ThreadPoolExecutor)
- // Executors.newCachedThreadPool(); //core 大小:0 max 大小:2147483647
- // ThreadPoolExecutor threadPool = (ThreadPoolExecutor)
- // Executors.newFixedThreadPool(3); //core 大小:3 max 大小:3
- ThreadPoolExecutor threadPool = (ThreadPoolExecutor) Executors
- .newScheduledThreadPool(3); // core 大小:3 max 大小:2147483647
- System.out.println("core 大小:" + threadPool.getCorePoolSize()
- + " max 大小:" + threadPool.getMaximumPoolSize());
- /*
- * 其实 newFixedThreadPool 是创建了一个 ThreadPoolExecutor return new
- * ThreadPoolExecutor(3[corePoolSize], 3[maximumPoolSize], 0L,
- * TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); 当
- * corePoolSize 和 maximumPoolSize 大小一样时,即为 newFixedThreadPool
- */
- for (int i = 1; i < 5; i++) {
- final int taskID = i;
- threadPool.execute(new Runnable() {
- // 也就是说最外层的 for 循环式正常运行的,execute 方法里面的 for循环不一定立即执行
- // execute(thread); 在未来的某个时间执行给定命令。该命令可能在新的线程,已入池的线程,后者正在调用的线程中执行,由Executor实现决定
- public void run() {
- for (int i = 1; i < 5; i++) {
- System.out.println("第" + taskID + "次任务的第" + i + "次执行");
- try {
- Thread.sleep(2000);// 为了测试出效果,让每次任务执行都需要一定时间
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- });
- }
- threadPool.shutdown();// 任务执行完毕,关闭线程池 ,线程池会自动关闭,即使没有调用 shutdown();
- }
- }