一、概述
1、介绍
在使用线程时,需要new一个,用完了又要销毁,这样频繁的创建和销毁很耗资源,所以就提供了线程池。道理和连接池差不多,连接池是为了避免频繁的创建和释放连接,所以在连
接池中就有一定数量的连接,要用时从连接池拿出,用完归还给连接池,线程池也一样。
线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。
脑图:https://www.processon.com/view/link/61849ba4f346fb2ecc4546e5
2、简单使用
线程池用法很简单, 分为三步。首先用工具类Executors创建线程池,然后给线程池分配任务,最后关闭线程池就行了。
1 public class ThreadPoolTest { 2 public static void main(String[] args) throws Exception { 3 4 // 1.创建一个 10 个线程数的线程池 5 ExecutorService service = Executors.newFixedThreadPool(10); 6 7 // 2.执行一个Runnable 8 service.execute(new Number1()); 9 10 // 2.提交一个Callable 11 Future<Integer> future = service.submit(new Number2()); 12 Integer integer = future.get(); 13 System.out.println("result = " + integer); 14 15 // 关闭线程池 16 service.shutdown(); 17 } 18 } 19 20 class Number1 implements Runnable { 21 22 @Override 23 public void run() { 24 System.out.println("----打印Runnable----"); 25 } 26 } 27 28 // 10以内数求和 29 class Number2 implements Callable<Integer> { 30 private int sum = 0; 31 32 @Override 33 public Integer call() { 34 for (int i = 0; i <= 10; i++) { 35 if (i % 2 == 0) { 36 sum += i; 37 } 38 } 39 return sum; 40 } 41 }
11-18 15:45