ThreadPool由初始化自身、初始化线程池中的线程及添加任务方法构成
/**
* 简单线程池
*/
class ThreadPool {
/* 线程池数量*/
private static int SYSTEME_BUSY_TASK_COUT = 8;
/* 所有的线程*/
public PoolWorker[] workers;
/* 任务队列*/
private static List<Task> taskQueue = Collections.synchronizedList(new LinkedList<Task>());
/* 是否打印日志*/
private static boolean debug = false;
private static ThreadPool instance = ThreadPool.getInstance();
private ThreadPool() {
workers = new PoolWorker[SYSTEME_BUSY_TASK_COUT];
for(int i = 0; i < SYSTEME_BUSY_TASK_COUT; i++) {
workers[i] = new PoolWorker(i);
}
}
private ThreadPool(int pool_worker_num) {
SYSTEME_BUSY_TASK_COUT = pool_worker_num;
workers = new PoolWorker[SYSTEME_BUSY_TASK_COUT];
for(int i = 0; i < SYSTEME_BUSY_TASK_COUT; i++) {
workers[i] = new PoolWorker(i);
}
}
/**
* 获取一个线程实例
* @return
*/
static synchronized ThreadPool getInstance() {
if (instance == null)
instance = new ThreadPool();
return instance;
}
/**
* 线程池中线程
*/
private class PoolWorker extends Thread {
/* 线程标识*/
private int index = -1;
public PoolWorker(int index) {
this.index = index;
start();
}
@Override
public void run() {
while(true) {
Task task = null;
synchronized (taskQueue) {
while(taskQueue.isEmpty()) {
try {
/* 队列为空则等待*/
taskQueue.wait(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
task = taskQueue.remove(0);
if (task != null) {
if (debug)
System.out.println("正在执行xx任务");
new Thread(task, String.valueOf(index)).start();
}
}
}
}
/**
* 添加任务
* @param task
*/
public void addTask(Task task) {
synchronized (taskQueue) {
taskQueue.add(task);
taskQueue.notifyAll();
}
}
}
Task.java
class Task implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "正在执行该任务");
}
}
测试