posts - 38, comments - 2, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

(转)队列和线程池简单示例

Posted on 2009-08-03 18:18 AntiquMan 阅读(195) 评论(0)  编辑  收藏 所属分类: Thread

基本演示了线程池和队列的应用

  public class WorkQueue { 
   

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

  public WorkQueue(int nThreads){ 
     this.nThreads = nThreads; 
     queue = new LinkedList(); 
     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(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(){ 
              String name=Thread.currentThread().getName(); 
              try{ 
                  Thread.sleep(100);//模拟任务执行的时间 
              }catch(InterruptedException e){} 
              System.out.println(name+" executed OK"); 
         } 
  } 


只有注册用户登录后才能发表评论。


网站导航: