A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马云 中级黑马   /  2012-3-29 19:46  /  1358 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package demo;

  2. import java.io.Serializable;
  3. import java.util.concurrent.ArrayBlockingQueue;
  4. import java.util.concurrent.ThreadPoolExecutor;
  5. import java.util.concurrent.TimeUnit;

  6. public class TestThreadPool{
  7.         private static int produceTaskSleepTime=2;                                                //派发任务的间隔时间
  8.         private static int consumeTaskSleepTime=2000;                                        //处理任务的速度
  9.         private static int produceTaskMaxNumber=10;                                                //任务数量
  10.        
  11.         public  static void main(String[] args){
  12.                 ThreadPoolExecutor threadPool=new ThreadPoolExecutor(
  13.                                 2,                                                                                                        //池中所保存的线程数,包括空闲线程。
  14.                                 4,                                                                                                        //池中允许的最大线程数
  15.                                 3,                                                                                                        //当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
  16.                                 TimeUnit.SECONDS,                                                                        // 参数的时间单位
  17.                                 new ArrayBlockingQueue<Runnable>(3),                                //执行前用于保持任务的队列。此队列仅由保持 execute 方法提交的 Runnable 任务
  18.                                 new ThreadPoolExecutor.DiscardOldestPolicy());                //由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序。
  19.        
  20.                 for(int i=1;i<=produceTaskMaxNumber;i++){
  21.                         try{
  22.                                 String task="task@"+i;
  23.                                 System.out.println("派发任务"+task);
  24.                                 threadPool.execute(new ThreadPoolTask(task));
  25.                                 Thread.sleep(produceTaskSleepTime);                                        //发完任务休息时间
  26.                         }catch(Exception e){
  27.                                 e.printStackTrace();
  28.                         }
  29.                 }
  30.         }
  31.        
  32.         public static class ThreadPoolTask implements Runnable,Serializable{                //任务接口(一个任务)
  33.                 private static final long serialVersionUID = 1907601920449539447L;
  34.                 private  Object threadPoolTaskData;
  35.                 ThreadPoolTask(Object  tasks){
  36.                         this.threadPoolTaskData=tasks;
  37.                 }

  38.                 @Override
  39.                 public void run() {
  40.                         System.out.println("start.."+threadPoolTaskData);
  41.                         try{
  42.                                 Thread.sleep(consumeTaskSleepTime);
  43.                         }catch(Exception e){
  44.                                 e.printStackTrace();
  45.                         }
  46.                         threadPoolTaskData=null;
  47.                 }
  48.                
  49.                 public Object getTask(){
  50.                         return this.threadPoolTaskData;
  51.                 }
  52.         }
  53. }
复制代码
运行结果:
派发任务task@1
start..task@1
派发任务task@2
start..task@2
派发任务task@3
派发任务task@4
派发任务task@5
派发任务task@6
start..task@6
派发任务task@7
start..task@7
派发任务task@8
派发任务task@9
派发任务task@10
start..task@8
start..task@9
start..task@10


为什么有的任务没有执行到呢。??求大师解!

1 个回复

倒序浏览
这个还是看不懂。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马