首先我们来看一下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 |