欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK 线程池小结

程序员文章站 2024-01-29 19:23:16
...

1、工具类 Executors 提供几种生成线程池的方法,这些线程池都是统一封装的同一个类,具体如下:

public static ExecutorService newSingleThreadExecutor() {   //单线程线程池
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }


public static ExecutorService newFixedThreadPool(int nThreads) {       //固定线程数线程池

        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());   //列表阻塞队列
                                      
    }

public static ExecutorService newCachedThreadPool() {         //缓存线程池
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());      //无缓冲区队列 SynchronousQueue
    }


/**
*ThreadPoolExecutor 构造方法,及其各参数说明
*
**/

public ThreadPoolExecutor(int corePoolSize,              //核心线程数,线程池最小数量,无任务情况下也会存在
                              int maximumPoolSize,                    //线程池最大数量,当任务很多时,最多创建数目
                              long keepAliveTime,                      //线程的最大空闲时间
                              TimeUnit unit,                               //
                              BlockingQueue<Runnable> workQueue) {      //阻塞队列
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);             //defaultThreadFactory 创建线程的工场
    }

实际运用是 ForkJoinPool ,
1、使用场景,游戏详情,客户下单,支付回调等多路并行

线程池注意点:
1、设置core大小
2、设置阻塞任务队列大小
3、选择拒绝策略