java线程(四) 线程池
1. 原理:
? ? ? ??线程池的基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源?,类似于数据库连接池等。从系统资源的角度看,在一个 JVM 里创建太多的线程可能会导致系统由于过度消耗内存而用完内存或“切换过度”?,?线程池就可以用于限制任何给定时刻处理的请求数目,避免创建过多的线程导致系统崩溃。?
2. 线程池的种类:
固定大小的线程池:创建固定线程数量的线程池,如果任务数大于线程池中线程的数量,那么任务将等待
单任务线程池:创建一个线程的线程池,相当于单线程串行执行所有任务。
可变尺寸的线程池?:根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们
定时器线程池:指定线程池中线程在多长时间后执行,以及每个多长时间执行一次
3.示例代码:
?
代码1:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author lcy * *2012-5-22 */public class Test { public static void main(String[] args) { //创建一个可重用固定线程数的线程池 // ExecutorService pool = Executors.newFixedThreadPool(2); //单任务线程池 // ExecutorService pool = Executors.newSingleThreadExecutor(); //创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。 ExecutorService pool = Executors.newCachedThreadPool(); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); //关闭线程池 pool.shutdown(); } } class MyThread extends Thread{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"正在执行。。。"); } }