线程池是一个容纳多个线程的容器,线程池中的线程可以重复使用,无需反复创建线程而消耗过多的资源
1.降低消耗,减少了创建和销毁线程的次数,每个线程都可以重复利用,可执行多个任务 2.提高响应速度,任务可以不需要等到线程创建就可以立即执行 3.提高线程的可管理性,根据系统的承受能力,调整线程池中工作线程的数目,防止消耗过多的内存,导致服务器死机
线程池的顶级接口是java.util.concurrent.Excetor,但是严格意义上来讲,Excutor并不是一个线程池,而只是一个执行线程的工具,真正的线程池接口是java.util.concurrent.ExceutorService,要配置一个线程池是比较复杂的,而且配置的线程池很可能不是最优的,因此java.util.cocurrent.Exceutors线程工程里提供了一些静态工厂,生成一些常用的线程池,官方建议使用Exceutors工程来创建线程池对象
创建线程池的方法 public static ExecutorService newFixedThreadPool(int nThreads) :返回线程池对象。(创建的是有界线 程池,也就是池中的线程个数可以指定最大数量) 获取到了一个线程池ExecutorService 对象,那么怎么使用呢,在这里定义了一个使用线程池对象的方法如下: public Future<?> submit(Runnable task) :获取线程池中的某一个线程对象,并执行 Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用。
使用线程池中线程对象的步骤
1.创建线程池对象 2.创建Runable接口子类对象 3.提交Runable接口的子类对象 4.关闭线程池
下面使用一段代码来操作一下下
package ThreadPool; public class MyThread implements Runnable { @Override public void run() { System.out.println("我要吃饭"); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("我吃饱了"); } } package ThreadPool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { //创建线程池对象 ExecutorService executorService = Executors.newFixedThreadPool(2); //创建Runable实例对象 MyThread myThread = new MyThread(); executorService.submit(myThread); executorService.submit(myThread); executorService.submit(myThread); } }
运行结果
原文链接:https://www.cnblogs.com/pjhaymy/p/13321037.html