大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Java技巧 > 最精简的java线程池与任务队列

最精简的java线程池与任务队列

关键词:Java最精简的java线程池与任务队列  阅读(550) 赞(12)

[摘要]本文主要是对最精简的java线程池与任务队列的讲解,希望对大家学习最精简的java线程池与任务队列有所帮助。

    1 import java.util.*;

    2 public class WorkQueue

    3 {

    4    private final int nThreads;//线程池的大小

    5    private final PoolWorker[] threads;//用数组实现线程池

    6    private final LinkedList queue;//任务队列

    7

    8   public WorkQueue(int nThreads){

    9      this.nThreads = nThreads;

    10      queue = new LinkedList();

    11      threads = new PoolWorker[nThreads];

    12

    13       for (int i=0; i<nThreads; i++) {

    14          threads[i] = new PoolWorker();

    15          threads[i].start();//启动所有工作线程

    16       }

    17   }

    18

    19   public void execute(Runnable r) {//执行任务

    20     synchronized(queue) {

    21             queue.addLast(r);

    22             queue.notify();

    23     }

    24   }

    25

    26   private class PoolWorker extends Thread {//工作线程类

    27         public void run() {

    28                Runnable r;

    29                while (true) {

    30                     synchronized(queue) {

    31                       while (queue.isEmpty()) {//如果任务队列中没有任务,等待

    32                         try{

    33                           queue.wait();

    34                         }catch (InterruptedException ignored){}

    35                       }

    36                        r = (Runnable) queue.removeFirst();//有任务时,取出任务

    37                    }

    38                    try {

    39                        r.run();//执行任务

    40                    }catch (RuntimeException e) {

    41                       // You might want to log something here

    42                   }

    43               }

    44       }

    45    }

    46

    47

    48  public static void main(String args[]){

    49       WorkQueue wq=new WorkQueue(10);//10个工作线程

    50       Mytask r[]=new Mytask[20];//20个任务

    51

    52       for(int i=0;i<20;i++){

    53            r[i]=new Mytask();

    54            wq.execute(r[i]);

    55       }

    56  }

    57 }

    58 class Mytask implements Runnable{//任务接口

    59          public void run(){

    60               String name=Thread.currentThread()。getName();

    61               try{

    62                   Thread.sleep(100);//模拟任务执行的时间

    63               }catch(InterruptedException e){}

    64               System.out.println(name+" executed OK");

    65          }

    66   }



相关评论