ThreadPoolExecutor使用例子

  1. public class Test1 {  
  2.   
  3.      private ThreadPoolExecutor threadpool;  
  4.        
  5.     /** 
  6.      * Param:  
  7.      * corePoolSize - 池中所保存的线程数,包括空闲线程。  
  8.      * maximumPoolSize - 池中允许的最大线程数(采用LinkedBlockingQueue时没有作用)。  
  9.      * keepAliveTime -当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间,线程池维护线程所允许的空闲时间。  
  10.      * unit - keepAliveTime参数的时间单位,线程池维护线程所允许的空闲时间的单位:秒 。  
  11.      * workQueue - 执行前用于保持任务的队列(缓冲队列)。此队列仅保持由execute 方法提交的 Runnable 任务。  
  12.      * RejectedExecutionHandler -线程池对拒绝任务的处理策略(重试添加当前的任务,自动重复调用execute()方法) 
  13.      */  
  14.       public Test1(){   
  15.         threadpool=new ThreadPoolExecutor(21020, TimeUnit.SECONDS, new ArrayBlockingQueue(10),   
  16.         new ThreadPoolExecutor.DiscardOldestPolicy());   
  17.       }   
  18.         
  19.       //add task into thread pool   
  20.       public void submit(final int flag){   
  21.         threadpool.execute(new Runnable(){   
  22.           public void run(){   
  23.             try {   
  24.               Thread.sleep(2000);   
  25.             } catch (InterruptedException e) {   
  26.               e.printStackTrace();   
  27.             }   
  28.             System.out.println(flag + "   Hello");   
  29.           }  
  30.         });       
  31.       }   
  32.           
  33.     /** 
  34.      * close thread pool 
  35.      */  
  36.     public void shutdown() {  
  37.         threadpool.shutdown();  
  38.     }  
  39.   
  40.     public static void main(String[] args) {  
  41.         Test1 t = new Test1();  
  42.         for (int i = 0; i < 20; i++) {  
  43.             System.out.println("time:" + i);  
  44.             t.submit(i);  
  45.         }  
  46.           
  47.         System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");  
  48.     }  
  49.       
  50.     /** 
  51.      * 当一个任务通过execute(Runnable)方法欲添加到线程池时: 
  52.      * 1.如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。 
  53.      * 2.如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。 
  54.      * 3.如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。 
  55.      * 4.如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 
  56.      * handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize 
  57.      * ,如果三者都满了,使用handler处理被拒绝的任务。  
  58.      *  
  59.      * 5.当线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。 
  60.      */  
  61. }  
附上一篇详细讲解使用threadpool的博客:

java自带线程池和队列详细讲解

http://www.oschina.net/question/565065_86540
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值