1 import java.util.concurrent.ExecutorService; 2 import java.util.concurrent.Executors; 3 import java.util.concurrent.TimeUnit; 4 5 /** 6 * 第四种获取线程的方式:线程池 7 * 底层为实现为ThreadPoolExecutor类 8 * 线程池做的工作主要是控制运行线程的数量,处理过程种将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 9 * 他的主要特点为:线程复用:控制最大并发数:线程管理。 10 * 第一:降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 11 * 第二:提高响应速度,当任务到达时,任务可以不需要的等到线程创建就能立即执行 12 * 第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和控制 13 * 14 */ 15 public class MyThreadPoolDemo { 16 17 public static void main(String[] args) { 18 //ExecutorService threadPool = Executors.newFixedThreadPool(5);//一个池5个线程 19 //ExecutorService threadPool = Executors.newSingleThreadExecutor();//一个池1个线程 20 ExecutorService threadPool = Executors.newCachedThreadPool();//一个池N个线程 21 //模拟10个用户来办理业务,每个用户就是一个自外部的请求线程 22 23 try { 24 for (int i = 1; i <10 ; i++) { 25 threadPool.execute(()->{ 26 System.out.println(Thread.currentThread().getName()+"\t 执行业务"); 27 }); 28 try {TimeUnit.MICROSECONDS.sleep(100);} catch (InterruptedException e) {e.printStackTrace();} 29 } 30 }catch (Exception e){ 31 e.printStackTrace(); 32 }finally { 33 threadPool.shutdown(); 34 } 35 } 36 }