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;
}
}
}
}
}
}