java 构建的线程池(2)
线程池,并为客户端的请求分配不同的线程来进行处理,如果线程池满了,它会对你发出警告信息。
最后一个类是SimpleThread类,它是Thread类的一个子类,它才真正对客户端的请求进行处理,
SimpleThread在示例程序初始化时都处于睡眠状态,但如果它接受到了ThreadPoolManager类发过来的调度
信息,则会将自己唤醒,并对请求进行处理。
首先我们来看一下TestThreadPool类的源码:
//TestThreadPool.java
1 import java.io.*;
2
3
4 public class TestThreadPool
5 {
6 public static void main(String[] args)
7 {
8 try{
9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10 String s;
11 ThreadPoolManager manager = new ThreadPoolManager(10);
12 while((s = br.readLine()) != null)
13 {
14 manager.process(s);
15 }
16 }catch(IOException e){}
17 }
18 }
由于此测试程序用到了输入输入类,因此第1行导入了JAVA的基本IO处理包,在第11行中,我们创建了
一个名为manager的类,它给ThreadPoolManager类的构造函数传递了一个值为10的参数,告诉
ThreadPoolManager类:我要一个有10个线程的池,给我创建一个吧!第12行至15行是一个无限循环,它用
来等待用户的键入,并将键入的字符串保存在s变量中,并调用ThreadPoolManager类的process方法来将这
个请求进行处理。
下面我们再进一步跟踪到ThreadPoolManager类中去,以下是它的源代码:
//ThreadPoolManager.java
1 import java.util.*;
2
3
4 class ThreadPoolManager
5 {
6
7 private int maxThread;
8 public Vector vector;
9 public void setMaxThread(int threadCount)
10 {
11 maxThread = threadCount;
12 }
13
14 public ThreadPoolManager(int threadCount)
15 {
16 setMaxThread(threadCount);
17 System.out.println("Starting thread pool...");
18 vector = new Vector();
19 for(int i = 1; i <= 10; i++)
20 {
21 SimpleThread thread = new SimpleThread(i);
22 vector.addElement(thread);
23 thread.start();
24 }
25 }
26
27 public void process(String argument)
28 {
29 int i;
30 for(i = 0; i < vector.size(); i++)
31 {
32 SimpleThread currentThread = (SimpleThread)vector.elementAt(i);
33 if(!currentThread.isRunning())
34 {
35 System.out.println("Thread "+ (i+1) +" is processing:" +
argument);
36 currentThread.setArgument(argument);
37 currentThread.setRunning(true);
38 return;
39 }
40 }
41 if(i == vector.size())
42 {
43 System.out.println("pool is full, try in another time.");
44 }
45 }
46 }//end of class ThreadPoolManager
我们先关注一下这个类的构造函数,然后再看它的process()方法。第16-24行是它的构造函数,首先
相关新闻>>
- 发表评论
-
- 最新评论 更多>>