1.线程池概念
线程池,其实就是一个容纳多线程的容器,其中的线程可以反复的使用,省去了频繁创建线程对象的操作,无须反复创建线程而消耗过多的资源
2.使用线程池方式-----Runnabbe接口
通常,线程池都是通过线程池工厂创建,再调用线程池中的方法获取线程,再通过线程去执行任务方法。
(1)Executors类:线程池创建工厂类(其中的方法全为静态方法)
方法: newFixedThreadPool(int nThreads)
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
方法的返回值是Executors类的一个实现类static ExecutorService(线程池类)
(2)ExecutorService:线程池类
方法:Future<?> submit(Runnable task)
提交一个 Runnable (即Runnable的一个实现类)任务用于执行,并返回一个表示该任务的 Future。
//Futrure<?>接口:用来记录线程任务执行完毕后产生的结果
(3)销毁线程池(应该是为了释放资源…)
方法:void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
package cn.itcast.demo06;
public class ThreadPoolRunnable implements Runnable {
public void run() {
System.out.println(Thread.currentThread().getName()+"线程提交任务");
}
}
package cn.itcast.demo06;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
* JDK1.5新特性,实现线程池特性
* 1.使用工厂类Executors中的静态方法创建线程池对象,指定线程个数
* stcatic ExecutorService newFixedThreadPool(int 个数);返回线程池对象
* 返回的是ExecutorService接口的实现类(线程池对象)
*
* 2.接口实现类对象,调用submit(Runnable r)方法,提交线程执行任务
*/
public class ThreadpoolDemo {
public static void main(String[] args) {
// 第一步
ExecutorService es = Executors.newFixedThreadPool(2);
// System.out.println(es);
// 第二步
es.submit(new ThreadPoolRunnable());
es.submit(new ThreadPoolRunnable());
es.shutdown();//销毁线程池
}
}