码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA线程池

时间:2016-08-05 13:30:34      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

 

线程类:

 1 class RunThread implements Runnable{
 2 
 3     int Counter = 0;
 4     @Override
 5     public synchronized void run() {
 6 
 7         try {
 8             Thread.sleep(500);
 9         } catch (InterruptedException e) {
10             e.printStackTrace();
11         }    
12         System.out.println(Thread.currentThread().getName()+"count:"+Counter++);
13     }
14 
15 }

执行函数:

 1     public static void main(String[] args) {
 2 
 3         ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,
 4                 new ArrayBlockingQueue<Runnable>(10));
 5         
 6         for (int i = 0; i < 15; i++) {
 7             RunThread runThread = new RunThread();
 8             System.out.println("线程池中线程数目:"+executor.getPoolSize()+",队列中等待执行的任务数目:"+
 9                      executor.getQueue().size()+",已执行玩别的任务数目:"+executor.getCompletedTaskCount());
10             try {
11                 executor.execute(runThread);
12             } catch (Exception e) {
13                 e.printStackTrace();
14             }
15             
16         }
17         executor.shutdown();
18     }

运行结果:

线程池中线程数目:0,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:1,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:2,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:3,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:4,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:1,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:2,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:3,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:4,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:6,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:7,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:8,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:9,已执行玩别的任务数目:0
pool-1-thread-2count:0
pool-1-thread-4count:0
pool-1-thread-1count:0
pool-1-thread-3count:0
pool-1-thread-5count:0
pool-1-thread-4count:0
pool-1-thread-2count:0
pool-1-thread-1count:0
pool-1-thread-3count:0
pool-1-thread-5count:0
pool-1-thread-2count:0
pool-1-thread-4count:0
pool-1-thread-1count:0
pool-1-thread-5count:0
pool-1-thread-3count:0

修改参数:

new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));

输出结果:

线程池中线程数目:0,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:1,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:2,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:3,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:4,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:1,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:2,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:3,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:4,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
线程池中线程数目:6,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
线程池中线程数目:7,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
线程池中线程数目:8,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
线程池中线程数目:9,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
pool-1-thread-4count:0
pool-1-thread-2count:0
pool-1-thread-5count:0
pool-1-thread-3count:0
pool-1-thread-1count:0
pool-1-thread-10count:0
pool-1-thread-9count:0
pool-1-thread-8count:0
pool-1-thread-7count:0
pool-1-thread-6count:0
pool-1-thread-4count:0
pool-1-thread-3count:0
pool-1-thread-5count:0
pool-1-thread-2count:0
pool-1-thread-1count:0

修改参数:

ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 8, 200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));

输出结果:

线程池中线程数目:0,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:1,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:2,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:3,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:4,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:1,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:2,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:3,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:4,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
线程池中线程数目:6,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
线程池中线程数目:7,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
线程池中线程数目:8,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
java.util.concurrent.RejectedExecutionException: Task com.uestc.xst.RunThread@1884174 rejected from java.util.concurrent.ThreadPoolExecutor@814013[Running, pool size = 8, active threads = 8, queued tasks = 5, completed tasks = 0]
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.reject(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source)
    at com.uestc.xst.Main.main(Main.java:73)
java.util.concurrent.RejectedExecutionException: Task com.uestc.xst.RunThread@192c8d9 rejected from java.util.concurrent.ThreadPoolExecutor@814013[Running, pool size = 8, active threads = 8, queued tasks = 5, completed tasks = 0]
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.reject(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source)
    at com.uestc.xst.Main.main(Main.java:73)
线程池中线程数目:8,队列中等待执行的任务数目:5,已执行玩别的任务数目:0
pool-1-thread-3count:0
pool-1-thread-1count:0
pool-1-thread-2count:0
pool-1-thread-4count:0
pool-1-thread-5count:0
pool-1-thread-7count:0
pool-1-thread-6count:0
pool-1-thread-8count:0
pool-1-thread-3count:0
pool-1-thread-2count:0
pool-1-thread-5count:0
pool-1-thread-4count:0
pool-1-thread-1count:0

继续修改参数:

ThreadPoolExecutor executor = new ThreadPoolExecutor(15, 25, 200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));

输出结果:

线程池中线程数目:0,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:1,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:2,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:3,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:4,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:5,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:6,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:7,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:8,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:9,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:10,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:11,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:12,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:13,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
线程池中线程数目:14,队列中等待执行的任务数目:0,已执行玩别的任务数目:0
pool-1-thread-1count:0
pool-1-thread-5count:0
pool-1-thread-3count:0
pool-1-thread-2count:0
pool-1-thread-4count:0
pool-1-thread-9count:0
pool-1-thread-7count:0
pool-1-thread-10count:0
pool-1-thread-8count:0
pool-1-thread-6count:0
pool-1-thread-11count:0
pool-1-thread-13count:0
pool-1-thread-14count:0
pool-1-thread-15count:0
pool-1-thread-12count:0

结果分析:

  当线程池中线程大小达到核心线程上限时,如果还有线程开启,会优先放到任务缓存队列中,如果队列满了,则在MaximunPoolSize未满时,则开辟新的线程,如果MaximunPoolSize已满,则会抛出异常。

 

JAVA线程池

标签:

原文地址:http://www.cnblogs.com/centor/p/5740737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!