就是个装Thread对象的容器,线程的建立和销毁都是很耗费系统资源的事情,若是一个程序运行的代码很简单,可是涉及到屡次线程建立和销毁,将会很浪费时间,浪费资源,因此线程池站了出来解决这个问题,线程池里装了若干线程对象(建立线程池时要咱们指定),当一个用户须要执行线程任务时,从线程池拿一个对象分配任务,若是线程不够用,任务对象会等待,当一个线程任务结束,并不会销毁线程而是回答池子里去,线程的建立和管理交给jvm,咱们须要作的事情就是指定咱们须要几个线程,以及指定任务便可。java
ExecutorService es = Executors.newFixedThreadPool(3);web
2.指定任务,能够定义Runnable接口实现类,能够匿名内部类,能够lambda表达式,总之将任务穿给第一步获取到的提供代码执行服务的对象,调用的方法是submitjvm
//匿名内部类 es.submit(new Runnable(){ ... }); //lambda es.submit(()->{...});
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolDemo { public static void main(String[] args) { // 1.获取执行任务的服务对象 ExecutorService es = Executors.newFixedThreadPool(3); // 2.提交任务 es.submit(() -> { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + "is hehe" + i); } }); for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " is haha..." + i); } es.submit(() -> { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + "is hehe" + i); } }); for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " is haha..." + i); } es.submit(() -> { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + "is hehe" + i); } }); for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " is haha..." + i); } } }