新的起点 新的开始

快乐生活 !

学习实践 JDK5 concurrent 并行包之executor(一)

这是介绍使用JDK 并行包之executor 第一部分,Executors 注意是复数,是最主要的工厂,通过它可以创建许多有用的东东,这部分介绍是如何创建一个固定的线程池。具体参考代码中的注释。

1
 package net.vincent.study.executor;
 2 import java.util.concurrent.ExecutorService;
 3 import java.util.concurrent.Executors;
 4 
 5 
 6 /** This is part1 of study executor package in concurrent on JDK 5.0
 7  * 
 8  * @author wma
 9  */
10 public class Part1 {
11 
12      /**
13      Create a fixed threadPool for test.
14      * @param Number of thread of threadPool
15      * @return Created threadPool
16      * @throws null
17      */
18     public static ExecutorService getThreadPool(int numberOfThread){
19         if(numberOfThread<=0){
20             return null;
21             }
22         ExecutorService exec = Executors.newFixedThreadPool(numberOfThread);
23         return exec;
24     } 
25     /**
26      * Create ruunbale, this runnable will random sleep.
27      * @return a Runnbale
28      */
29     public static Runnable getRunnable(){
30         Runnable run = new Runnable() {
31             public void run() {
32               long time = (long) (Math.random() * 1000);
33               System.out.println("Sleeping " + time + "ms");
34                 try {
35                   Thread.sleep(time);
36                 } catch (InterruptedException e) {
37                 }
38             }
39           };
40           return run;
41     }
42     /**In main method, we create a threadPool(ThreadPoolExecutor) and capability is 4.
43      * After we submit 100 thread to this threadPool(ThreadPoolExecutor) and run it.
44      * Notice: If number of thread you submitted exceed capability, and threadPool(ThreadPoolExecutor) dont block Main method,
45      * because threadPool add other thread to queue.see code of ThreadPoolExecutor
46      * 
47      *  private final BlockingQueue<Runnable> workQueue;
48      *  private final HashSet<Worker> workers = new HashSet<Worker>();
49      *  try {
50             if (poolSize < corePoolSize && runState == RUNNING)
51                 t = addThread(firstTask); // add other thread to queue.
52         } finally {
53             mainLock.unlock();
54         }
55         if (t == null)
56             return false;
57         t.start();
58         return true;
59         
60          private Thread addThread(Runnable firstTask) {
61         Worker w = new Worker(firstTask);
62         Thread t = threadFactory.newThread(w);
63         if (t != null) {
64             w.thread = t;
65             workers.add(w);
66             int nt = ++poolSize;
67             if (nt > largestPoolSize)
68                 largestPoolSize = nt;
69         }
70         return t;
71     }
72      * 
73      * @param args
74      */
75     public static void main(String[] args) {
76         ExecutorService  exe = getThreadPool(4);
77         for(int i =0 ; i<100; i++)
78         exe.execute(getRunnable());
79         exe.shutdown();
80         
81         
82     }
83 
84 }
85 

posted on 2007-09-26 14:32 advincenting 阅读(645) 评论(1)  编辑  收藏

评论

# re: 学习实践 JDK5 concurrent 并行包之executor(一) 2007-09-27 19:19 千里冰封

建议楼主加点注释  回复  更多评论   


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


网站导航:
 

公告

Locations of visitors to this page

导航

<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

统计

常用链接

留言簿(13)

随笔分类(71)

随笔档案(179)

文章档案(13)

新闻分类

IT人的英语学习网站

JAVA站点

优秀个人博客链接

官网学习站点

生活工作站点

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜