线程池需要有数量控制属性、创建线程工厂、任务队列策略等功能,线程池初始化代码如下所示:
package com.wangwenjun.concurrent.chapter08;
import java.util.ArrayDeque;import java.util.Queue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
public class BasicThreadPool extends Thread implements The
{
//初始化线程数量
private final int initSize;
//线程池最大线程数量
private final int maxSize;
//线程池核心线程数量
private final int coreSize;
//当前活跃的线程数量
private int activeCount;
//创建线程所需的工厂
private final ThreadFactory threadFactory;
//任务队列
private final RunnableQueue runnableQueue;
//线程池是否已经被shutdown private volatile boolean isshutdown=false;
//工作线程队列
private final Queue threadQueue=new Array
private final static DenyPolicy DEFAULT_DENY_POLICY=ne
private final static ThreadFactory DEFAULT_THREAD_FACTOE
private final long keepAliveTime;
private final TimeUnit timeUnit;
//构造时需要传递的参数:初始的线程数量,最大的线程数量,核心线程数
public BasicThreadPool(int initSize,int maxSize,int cc int queueSize)
}
//构造线程池时需要传入的参数,该构造函数需要的参数比较多
public BasicThreadPool(int initSize,int maxSize)
//初始化时,先创建initsize个线程
private void init()
{
start();
for(inti=0;i
{
newThread();
}
}
一个线程池除了控制参数之外,最主要的是应该有活动线程,其中Queue-Thread-Task>主要用来存放活动线程,BasicThreadPool同时也是Thread的子类,它在初始化的时候启动,在keepalive时间间隔到了之后再自动维护活动线程数量。
看到这里,Java中,编写线程初始化线程池的代码,你都学会了吗?