打字猴:1.700450717e+09
1700450717 编写高质量代码:改善Java程序的151个建议 [:1700438201]
1700450718 编写高质量代码:改善Java程序的151个建议 建议126:适时选择不同的线程池来实现
1700450719
1700450720 Java的线程池实现从最根本上来说只有两个:ThreadPoolExecutor类和Scheduled-ThreadPoolExecutor类,这两个类还是父子关系,但是Java为了简化并行计算,还提供了一个Executors的静态类,它可以直接生成多种不同的线程池执行器,比如单线程执行器、带缓冲功能的执行器等,但归根结底还是使ThreadPoolExecutor类或ScheduledThreadPoolExecutor类的封装类。
1700450721
1700450722 为了理解这些执行器,我们首先来ThreadPoolExecutor类,其中它复杂的构造函数可以很好解释该线程池的作用,代码如下:
1700450723
1700450724 public class ThreadPoolExecutor extends AbstractExecutorService{
1700450725
1700450726 //最完整的构造函数
1700450727
1700450728 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long
1700450729
1700450730 keep Alive Time, Time Unitunit, Block in gQueue<Runnable>
1700450731
1700450732 workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler){
1700450733
1700450734 //检验输入条件
1700450735
1700450736 if(corePoolSize<0||maximumPoolSize<=0||
1700450737
1700450738 maximumPoolSize<corePoolSize||keepAliveTime<0)
1700450739
1700450740 throw new IllegalArgumentException();
1700450741
1700450742 //检验运行环境
1700450743
1700450744 if(workQueue==null||threadFactory==null||handler==null)
1700450745
1700450746 throw new NullPointerException();
1700450747
1700450748 this.corePoolSize=corePoolSize;
1700450749
1700450750 this.maximumPoolSize=maximumPoolSize;this.workQueue=workQueue;
1700450751
1700450752 this.keepAliveTime=unit.toNanos(keepAliveTime);this.threadFactory=threadFactory;
1700450753
1700450754 this.handler=handler;
1700450755
1700450756 }
1700450757
1700450758 }
1700450759
1700450760 这是ThreadPoolExecutor最完整的构造函数,其他的构造函数都是引用该构造函数实现的,我们逐步来解释这些参数的含义。
1700450761
1700450762 corePoolSize:最小线程数。
1700450763
1700450764 线程池启动后,在池中保持线程的最小数量。需要说明的是线程数量是逐步到达corePoolSize值的,例如corePoolSize被设置为10,而任务数量只有5,则线程池中最多会启动5个线程,而不是一次性地启动10个线程。
1700450765
1700450766 maximumPoolSize:最大线程数量。
[ 上一页 ]  [ :1.700450717e+09 ]  [ 下一页 ]