基本思想如下:
在构建线程池的时候创建所有工作线程,并且让所有工作线程开始运行。
public ThreadPool(int nPoolSize)
{
if(nPoolSize<=0)
{
nPoolSize=DEFAULT_POOL_SIZE;
}
m_ThreadList=new ArrayList();
m_RunList=new LinkedList();
for(int i=0;i<nPoolSize;i++)
{
WorkerThread temp=new WorkerThread(i+1);
m_ThreadList.add(temp);
temp.start();
}
}
在工作线程的run()方法中用wait()进行等待,当线程处于wait()状态基本不占用CPU,这样所有工作线程都处于挂起状态,等待任务来唤醒。
实现如下:
while (true)
{
synchronized (m_RunList)
{
while (m_RunList.isEmpty())
{
//任务列表为空则进行等待,否则运行任务,并在本任务列表里面剔除任务
try
{
m_RunList.wait();
}
catch (InterruptedException e) {}
}
r = (Runnable) m_RunList.removeFirst();
file://System.out.println(m_nThreadID + ":Start");
if (r == null)return;
}
try
{
r.run();
}
catch (Exception e) {}
}
以上代码就是一个工作线程主要代码。这个线程永远不会停止,只可能被挂起,或者运行任务。