java 构建的线程池(3)
它给ThreadPoolManager类的成员变量maxThread赋值,maxThread表示用于控制线程池中最大线程的数量。
第18行初始化一个数组vector,它用来存放所有的SimpleThread类,这时候就充分体现了JAVA语言的优越
性与艺术性:如果你用C语言的话,至少要写100行以上的代码来完成vector的功能,而且C语言数组只能容
纳类型统一的基本数据类型,无法容纳对象。好了,闲话少说,第19-24行的循环完成这样一个功能:先
创建一个新的SimpleThread类,然后将它放入vector中去,最后用thread.start()来启动这个线程,为什
么要用start()方法来启动线程呢?因为这是JAVA语言中所规定的,如果你不用的话,那这些线程将永远得
不到激活,从而导致本示例程序根本无法运行。 
   下面我们再来看一下process()方法,第30-40行的循环依次从vector数组中选取SimpleThread线程
,并检查它是否处于激活状态(所谓激活状态是指此线程是否正在处理客户端的请求),如果处于激活状
态的话,那继续查找vector数组的下一项,如果vector数组中所有的线程都处于激活状态的话,那它会打
印出一条信息,提示用户稍候再试。相反如果找到了一个睡眠线程的话,那第35-38行会对此进行处理,
它先告诉客户端是哪一个线程来处理这个请求,然后将客户端的请求,即字符串argument转发给
SimpleThread类的setArgument()方法进行处理,并调用SimpleThread类的setRunning()方法来唤醒当前线
程,来对客户端请求进行处理。
可能你还对setRunning()方法是怎样唤醒线程的有些不明白,那我们现在就进入最后一个类:
SimpleThread类,它的源代码如下:
  //SimpleThread.java 
  1 class SimpleThread extends Thread 
  2 { 
  3 private boolean runningFlag; 
  4 private String argument; 
  5 public boolean isRunning() 
  6 { 
  7 return runningFlag; 
  8 } 
  9 public synchronized void setRunning(boolean flag) 
  10 { 
  11 runningFlag = flag; 
  12 if(flag) 
  13 this.notify(); 
  14 } 
  15 
  16 public String getArgument() 
  17 { 
  18 return this.argument; 
  19 } 
  20 public void setArgument(String string) 
  21 { 
  22 argument = string; 
  23 } 
  24 
  25 public SimpleThread(int threadNumber) 
  26 { 
  27 runningFlag = false; 
  28 System.out.println("thread " + threadNumber + "started."); 
  29 } 
  30 
  31 public synchronized void run() 
  32 { 
  33 try{ 
  34 while(true) 
  35 { 
  36 if(!runningFlag) 
  37 { 
  38 this.wait(); 
  39 } 
  40 else 
  41 { 
  42 System.out.println("processing " + getArgument() + "... done."); 
  43 sleep(5000); 
  44 System.out.println("Thread is sleeping..."); 
  45 setRunning(false); 
  46 } 
  47 } 
  48 } catch(InterruptedException e){ 
  49 System.out.println("Interrupt"); 
  50 } 
  51 }//end of run() 
  52 }//end of class SimpleThread 
如果你对JAVA的线程编程有些不太明白的话,那我先在这里简单地讲解一下,JAVA有一个名为Thread
的类,如果你要创建一个线程,则必须要从Thread类中继承,并且还要实现Thread类的run()接口,要激活
相关新闻>>
- 发表评论
 - 
				
 
- 最新评论 进入详细评论页>>
 






