天天看点

线程池的简单理解及使用

线程池的技术背景

1、线程的创建和销毁很耗资源,重用线程池中的线程。减少因对象创建销毁所带来的性能开销

2、有效控制线程的最大并发数,提高系统资源利用率,同时避免过多的资源竞争,避免堵塞;

线程池框架Executor

Executor : 所有线程池的接口。 

ExecutorService:增加Executor的行为(执行execute,关闭shutdown),是Executor实现类的最直接接口。

Executors : 提供一系列的工厂方法(静态方法),(直接调用)创建生成线程池。

eg:ExecutorService pool = Executors.newSingleThreadExecutor();

其中Executors生成的常见线程池可分为4类:

1、newSingleThreadExecutor

单个线程的线程池

2、newFixedThreadExecutor

固定数量线程池

3、newCacheThreadExecutor(推荐)

可缓存线程池,当线程池大小超过处理任务所需的线程,就会回收部分空闲线程。有任务来,又智能添加

4、newScheduleThreadExecutor

大小无限制线程池,支持定时和周期的执行线程

public class TestCachedThreadPool {
    public static void main(String[] args) {
        //创建一个可重用固定线程数的线程池
        ExecutorService pool = Executors.newCachedThreadPool();
        //创建实现了Runnable接口对象
        Thread t1 = new Thread ();
        Thread t2 = new Thread ();
        Thread t3 = new Thread ();
        Thread t4 = new Thread ();
        Thread t5 = new Thread ();
        //将线程放入池中进行执行
        pool.execute(t1);
        pool.execute(t2);
        pool.execute(t3);
        pool.execute(t4);
        pool.execute(t5);
        //关闭线程池
        pool.shutdown();
    }
}