线程池
简述:每个线程在执行完任务后都要被销毁,但是当有很多的线程时,这些线程又是执行很少的任务,就会出现频繁的创建销毁线程,消耗时间,这可以通过线程池得到解决,线程池里的线程执行完后不必销毁,继续执行其他任务,线程池就是一个容器可以使用集合实现。
1、使用集合中的LinkedLIst作为容器,LinkedList
Thread t = linkedlist.removeLast();// 使用前取出来
linkedlist.addLast();// 用完后归还
使用List或者LinkedList就是线程池的底层实现原理,实际上就是一个存储线程的集合。在JDK1.5之后,内置了线程池,可以直接线程池,可以直接使用
内置的线程池的使用
java.util.concurrent.Executors:生产线程池的工厂类
Executors类中的静态方法:
static ExecutorService newFixedThreadPool(int nThreads):创建一个可以重用的固定线程数的线程池
参数:int nThreads(线程池中线程数量)
返回值:ExecutorService接口,返回的是该接口的实现类对象,可以使用ExecutorService接口接收
java.util.concurrent.ExecutorService:线程池接口:
用来从线程池中获取线程,调用start方法,执行线程任务
submit(Runable task):提交一个Runable任务用于执行
shutdown():销毁线程池(不建议使用)
线程池的使用步骤:
1、使用线程池工厂类Executors提供的静态方法newFixedThreadPool创建一个线程池
2、创建一个Runable接口的实现类,重写run方法,设置线程任务
3、创建的线程池调用submit方法,传递线程任务,submit方法的参数是Runable实现类的对象
4、如果不再使用线程池,就可以调用shutdown方法销毁(不建议执行)
Runable实现类
package cn.zhuobo.day12.threadPool;
// 2、创建一个Runable接口的实现类,重写run方法,设置线程任务
public class RunableImpl implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "正在执行");// currentThread方法是Thread类的静态方法
}
}
线程池的使用
public class Demo01ThreadPool {
public static void main(String[] args) {
// 1、使用线程池工厂类Executors提供的静态方法newFixedThreadPool创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(3);
// 3、创建的线程池调用submit方法,传递线程任务,submit方法的参数是Runable实现类的对象
pool.submit(new RunableImpl());//
pool.submit(new RunableImpl());
pool.submit(new RunableImpl());
pool.submit(new RunableImpl());
}
}
执行结果:线程池1使用3个线程去执行这些任务
pool-1-thread-1正在执行
pool-1-thread-3正在执行
pool-1-thread-2正在执行
pool-1-thread-1正在执行