package test; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class PoolExecutorTest { public static void main(String[] args) { int corePoolSize = 2; int maximumPoolSize = 3; long keepAliveTime = 3L; ThreadPoolExecutor pool = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(1), new ThreadPoolExecutor.AbortPolicy()); for (int i = 0; i < 10; i++) { System.out.println("Active Count : " + pool.getActiveCount()); System.out.println("Core Pool Size : " + pool.getCorePoolSize()); System.out.println("Maximum Pool Size : " + pool.getMaximumPoolSize()); System.out.println("Pool Size : " + pool.getPoolSize()); System.out.println("准备添加任务" + i); while (true) { if (pool.getActiveCount() < maximumPoolSize) { break; } } pool.execute(new Task(i)); } pool.shutdown(); } } class Task extends Thread { int index; Task(int i) { index = i; } @Override public void run() { System.out.println("task[" + index + "]" + "begin"); try { Thread.sleep((long) (Math.random() * 10000)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("task[" + index + "]" + "end"); } }