Java 不错的线程队列

import java.util.LinkedList; 

public class WorkQueue { 

 private final int nThreads;// 线程池的大小 
 private final PoolWorker[] threads;// 用数组实现线程池 
 private final LinkedList<Runnable> queue;// 任务队列 

 public WorkQueue(int nThreads) { 
 this.nThreads = nThreads; 
 queue = new LinkedList<Runnable>(); 
 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() { 
 Runnable r; 
 while (true) { 
 synchronized (queue) { 
 while (queue.isEmpty()) {// 如果任务队列中没有任务,等待 
 try { 

 queue.wait(); 
 } catch (InterruptedException ignored) { 
 } 
 } 
 r = (Runnable) queue.removeFirst();// 有任务时,取出任务 
 } 
 try { 
 r.run();// 执行任务 
 } catch (RuntimeException e) { 
 // You might want to log something here 
 } 
 } 
 } 
 } 

 public static void main(String args[]) { 
 WorkQueue wq = new WorkQueue(1);// 10个工作线程 
 Mytask r[] = new Mytask[5];// 20个任务 

 for (int i = 0; i < 5; i++) { 
 r[i] = new Mytask(); 
 wq.execute(r[i]); 
 } 
 } 
} 

class Mytask implements Runnable {// 任务接口 
 public void run() { 
 String name = Thread.currentThread().getName(); 
 try { 
 Thread.sleep(5000);// 模拟任务执行的时间 
 } catch (InterruptedException e) { 
 } 
 System.out.println(name + " executed OK"); 
 } 

}
     

你可能感兴趣的:(java,thread,工作)