import java.util.*;
/**
* 简单的线程池与任务队列
*
*/
public class WorkQueue {
private final int nThreads;// 线程池的大小
private final PoolWorker[] threads;// 用数组实现线程池
public WorkQueue(int nThreads) {
this.nThreads = nThreads;
threads = new PoolWorker[nThreads];
for (int i = 0; i < nThreads; i++) {
threads[i] = new PoolWorker();
threads[i].start();// 启动所有工作线程
}
}
public void execute
(Runnable r
) {// 执行任务
synchronized (queue) {
queue.addLast(r);
queue.notify();
}
}
private class PoolWorker
extends Thread {// 工作线程类
public void run() {
while (true) {
synchronized (queue) {
while (queue.isEmpty()) {// 如果任务队列中没有任务,等待
try {
queue.wait();
}
}
r
= (Runnable) queue.
removeFirst();// 有任务时,取出任务
}
try {
r.run();// 执行任务
// TODO: handle exception
}
}
}
}
public static void main
(String args
[]) {
WorkQueue wq = new WorkQueue(10);// 10个工作线程
Mytask r[] = new Mytask[20];// 20个任务
for (int i = 0; i < 20; i++) {
r[i] = new Mytask();
wq.execute(r[i]);
}
}
}
class Mytask
implements Runnable {// 任务接口
public void run() {
try {
Thread.
sleep(100);// 模拟任务执行的时间
// TODO: handle exception
}
System.
out.
println(name
+ " executed OK");
}
}