|   首先我们来看一下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行是它的构造函数,首先它给ThreadPoolManager类的成员变量maxThread赋值,maxThread表示用于控制线程池中最大线程的数量。第18行初始化一个数组vector,它用来存放所有的SimpleThread类,这时候就充分体现了JAVA语言的优越性与艺术性:如果你用C语言的话,至少要写100行以上的代码来完成vector的功能,而且C语言数组只能容纳类型统一的基本数据类型,无法容纳对象。好了,闲话少说,第19-24行的循环完成这样一个功能:先创建一个新的SimpleThread类,然后将它放入vector中去,最后用thread.start()来启动这个线程,为什么要用start()方法来启动线程呢?因为这是JAVA语言中所规定的,如果你不用的话,那这些线程将永远得不到激活,从而导致本示例程序根本无法运行。
          
 说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
 
  2/2   首页 上一页 1 2 |