newFixedThreadPool:线程池中指定固定线程个数来执行任务
package com.roocon.thread.t2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Demo6 { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(10); for(int i = 0; i < 10; i++){ threadPool.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()+" is executing"); } }); } } }
运行结果:
pool-1-thread-1 is executing pool-1-thread-2 is executing pool-1-thread-3 is executing pool-1-thread-7 is executing pool-1-thread-4 is executing pool-1-thread-6 is executing pool-1-thread-5 is executing pool-1-thread-10 is executing pool-1-thread-9 is executing pool-1-thread-8 is executing
newCachedThreadPool():刚开始线程池中先创建几个线程用着,如果线程池中有空闲的线程可以去执行任务,则不会创建新的线程,
如果线程池中无可利用的线程,则会去创建新的线程。可以认为是智能的创建线程。
package com.roocon.thread.t2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Demo6 { public static void main(String[] args) { ExecutorService threadPool = Executors.newCachedThreadPool(); for(int i = 0; i < 10; i++){ threadPool.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()+" is executing"); } }); } } }
运行结果:
pool-1-thread-1 is executing pool-1-thread-3 is executing pool-1-thread-2 is executing pool-1-thread-4 is executing pool-1-thread-3 is executing pool-1-thread-1 is executing pool-1-thread-1 is executing pool-1-thread-4 is executing pool-1-thread-2 is executing pool-1-thread-5 is executing