电脑技术学习

JAVA教程:解析Java的多线程机制(3)

dn001
内容: 另外,如果应用程序必须等待网络连接或数据库连接等数据吞吐速度相对较慢的资源时,多线程应用程序是非常有利的。基于Internet的应用程序有必要是多线程类型的,例如,当开发要支持大量客户机的服务器端应用程序时,可以将应用程序创建成多线程形式来响应客户端的连接请求,使每个连接用户独占一个客户端连接线程。这样,用户感觉服务器只为连接用户自己服务,从而缩短了服务器的客户端响应时间。
  
  
  Java语言的多线程程序设计方法
  
  
  利用Java语言实现多线程应用程序的方法很简单。根据多线程应用程序继承或实现对象的不同可以采用两种方式:一种是应用程序的并发运行对象直接继承Java的线程类Thread;另外一种方式是定义并发执行对象实现Runnable接口。
  
  继承Thread类的多线程程序设计方法
  
  Thread 类是JDK中定义的用于控制线程对象的类,在该类中封装了用于进行线程控制的方法。见下面的示例代码:
  
  
//Consumer.java 
  import java.util.*;
  class Consumer extends Thread
  {
   int nTime;
   String strConsumer;
   public Consumer(int nTime, String strConsumer)
   {
   this.nTime = nTime;
   this.strConsumer = strConsumer;
   }
   public void run()
   {
  while(true)
  {
   try
  {
   System.out.println("Consumer name:"+strConsumer+"n");
   Thread.sleep(nTime);
   }
  catch(Exception e)
  {
   e.printStackTrace();
   }
  }
   }
  static public void main(String args[])
  {
   Consumer aConsumer = new Consumer (1000, "aConsumer");
   aConsumer.start();
   Consumer bConsumer = new Consumer (2000, "bConsumer");
   bConsumer.start();
   Consumer cConsumer = new Consumer (3000, "cConsumer ");
   cConsumer.start();
  }
  }

  
  
  
  
  从上面的程序代码可以看出:多线程执行地下Consumer继承Java语言中的线程类Thread并且在main方法中创建了三个Consumer对象的实例。当调用对象实例的start方法时,自动调用Consumer类中定义的run方法启动对象线程运行。线程运行的结果是每间隔nTime时间打印出对象实例中的字符串成员变量strConsumer的内容。
  
  可以总结出继承Thread类的多线程程序设计方法是使应用程序类继承Thread类并且在该类的run方法中实现并发性处理过程。
  
  实现Runnable接口的多线程程序设计方法
  
  Java语言中提供的另外一种实现多线程应用程序的方法是多线程对象实现Runnable接口并且在该类中定义用于启动线程的run方法。这种定义方式的好处在于多线程应用对象可以继承其它对象而不是必须继承Thread类,从而能够增加类定义的逻辑性。
  
  实现Runnable接口的多线程应用程序框架代码如下所示:
  
  //Consumer.java
  import java.util.*;
  class Consumer implements Runnable
  {
   … …
  public Consumer(int nTime, String strConsumer){… …}
  public void run(){… …}
  static public void main(String args[])
  {
  Thread aConsumer = new Thread(new Consumer(1000, "aConsumer"));
  aConsumer.start();
  //其它对象实例的运行线程
   //… …
   }
  }
  
  从上述代码可以看出:该类实现了Runnable接口并且在该类中定义了run方法。这种多线程应用程序的实现方式与继承Thread类的多线程应用程序的重要区别在于启动多线程对象的方法设计方法不同。在上述代码中,通过创建Thread对象实例并且将应用对象作为创建Thread类实例的参数。
转自: 赛迪网 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd 另外,?

标签: 线程