线程池:ThreadPoolExecutor
默认先创建好指定个数的线程,放入线程池中。
需要使用的时候,先到池子里面,那出来,使用。
用完在还回去,不要销毁掉。
它的消耗比创建销毁更少。
具体实例见课堂代码。
每一执行一批,就是ThreadPoolExecutor的大小。
然后,结束一个,再进入一个。
实例:
----创建线程类
package com.xzm.线程池; //自定义线程类 public class MyTask implements Runnable{ //只是为了让大家看到是第几个线程 private int num; public MyTask(int num) { this.num = num; } //重写 @Override public void run() { System.out.println("正在执行task-"+this.num); //休眠一会 try { Thread.currentThread().sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("task-"+this.num+",执行完毕!"); } }
----在主函数中创建线程池
package com.xzm.线程池; import java.util.concurrent.Executors; //导入需要的包文件 import java.util.concurrent.ThreadPoolExecutor; //【线程池】 public class Test { //主函数:主线程 public static void main(String[] args) { //创建线程池,可以是类中的属性或静态属性或方法变量 //这里就创建为方法中的变量 //声明线程池 = (转成线程池对象)系统方法创建; ThreadPoolExecutor executor = (ThreadPoolExecutor)Executors.newFixedThreadPool(5); //循环往池子里面添加线程 for(int i=1; i<=10; i++) { //创建新的线程 MyTask mt = new MyTask(i); //添加到线程池中 executor.execute(mt); } //停止接收新的任务 executor.shutdown(); } }