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() + "正在执行该任务"); } }
测试