读书人

线程池一

发布时间: 2012-11-05 09:35:12 作者: rapoo

线程池1

package interview.pool;import java.util.ArrayList;public class ThreadPool{// 线程池的大小public static int NUM_THREAD = 3;// 线程集合private ArrayList<Worker> threads = new ArrayList<Worker>(NUM_THREAD);private static final ThreadPool iNSTANCE = new ThreadPool();public static ThreadPool getInstance(){return iNSTANCE;}/** * 进行初始化工作 */private ThreadPool(){for (int i = 0; i < NUM_THREAD; i++){Worker worker = new Worker();threads.add(worker);worker.start();}}/** * 执行任务 */public synchronized void execute(Task task){// 取出一个不忙的线程进行处理for (Worker worker : threads){if (!worker.isBusy()){worker.setTask(task);worker.setBusy(true);return;}}// 都忙的话,则新建一个并添加到池中// Worker w = new Worker();// w.setTask(task);// w.setBusy(true);// w.start();// this.threads.add(w);try{Thread.sleep(1000);execute(task);}catch (InterruptedException e){e.printStackTrace();}}/** * 内部类:线程工作者 */private class Worker extends Thread{Task task = null;private boolean busy = false;public boolean isBusy(){return busy;}public void setBusy(boolean busy){this.busy = busy;}public Task getTask(){return task;}public Worker(){}public void setTask(Task task){this.task = task;}public void run(){while (true){if (task != null){try{task.execute();}// 任何情况,都会置为不忙状态finally{busy = false;task = null;}}}}}}

?

读书人网 >软件架构设计

热点推荐