程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 用Java實現多線程服務器程序

用Java實現多線程服務器程序

編輯:JAVA編程入門知識

  ---- 摘要:在Java出現之前,編寫多線程程序是一件煩瑣且伴隨許多不安全因素的事情。利用Java,編寫安全高效的多線程程序變得簡單,而且利用多線程和Java的網絡包我們可以方便的實現多線程服務器程序。
  
  ---- Java是伴隨Internet的大潮產生的,對網絡及多線程具有內在的支持,具有網絡時代編程語言的一切特點。從Java的當前應用看,Java主要用於在Internet或局域網上的網絡編程,而且將Java作為主流的網絡編程語言的趨勢愈來愈明顯。實際工作中,我們除了使用商品化的服務器軟件外,時常需要按照實際環境編寫自己的服務器軟件,以完成特定任務或與特定客戶端軟件實現交互。在實現服務器程序時,為提高程序運行效率,降低用戶等待時間,我們應用了在Java Applet中常見的多線程技術。
  
  ---- 一、Java中的服務器程序與多線程
  
  ---- 在Java之前,沒有一種主流編程語言能夠提供對高級網絡編程的固有支持。在其他語言環境中,實現網絡程序往往需要深入依靠於操作平台的網絡API的技術中去,而Java提供了對網絡支持的無平台相關性的完整軟件包,使程序員沒有必要為系統網絡支持的細節而煩惱。
  
  ---- Java軟件包內在支持的網絡協議為TCP/IP,也是當今最流行的廣域網/局域網協議。Java有關網絡的類及接口定義在java.net包中。客戶端軟件通常使用java.net包中的核心類Socket與服務器的某個端口建立連接,而服務器程序不同於客戶機,它需要初始化一個端口進行監聽,碰到連接呼叫,才與相應的客戶機建立連接。Java.net包的ServerSocket類包含了編寫服務器系統所需的一切。下面給出ServerSocket類的部分定義。
  
  public class ServerSocket {
  public ServerSocket(int port)
  throws IOException ;
  public Socket accept() throws IOException ;
  public InetAddress getInetAddress() ;
  public int getLocalPort() ;
  public void close() throws IOException ;
  public synchronized void setSoTimeout
  (int timeout) throws SocketException ;
  public synchronized int
  getSoTimeout() throws IOException ;
  }
  
  
  ---- ServerSocket構造器是服務器程序運行的基礎,它將參數port指定的端口初始化作為該服務器的端口,監聽客戶機連接請求。Port的范圍是0到65536,但0到1023是標准Internet協議保留端口,而且在Unix主機上,這些端口只有root用戶可以使用。一般自定義的端口號在8000到16000之間。僅初始化了ServerSocket還是遠遠不夠的,它沒有同客戶機交互的套接字(Socket),因此需要調用該類的accept方法接受客戶呼叫。Accept()方法直到有連接請求才返回通信套接字(Socket)的實例。通過這個實例的輸入、輸出流,服務器可以接收用戶指令,並將相應結果回應客戶機。ServerSocket類的getInetAddress和getLocalPort方法可得到該服務器的IP地址和端口。setSoTimeout和getSoTimeout方法分別是設置和得到服務器超時設置,假如服務器在timout設定時間內還未得到accept方法返回的套接字實例,則拋出IOException的異常。
  ---- Java的多線程可謂是Java編程的精華之一,運用得當可以極大地改善程序的響應時間,提高程序的並行性。在服務器程序中,由於往往要接收不同客戶機的同時請求或命令,因此可以對每個客戶機的請求生成一個命令處理線程,同時對各用戶的指令作出反應。在一些較復雜的系統中,我們還可以為每個數據庫查詢指令生成單獨的線程,並行對數據庫進行操作。實踐證實,采用多線程設計可以很好的改善系統的響應,並保證用戶指令執行的獨立性。由於Java本身是"線程安全"的,因此有一條編程原則是能夠獨立在一個線程中完成的操作就應該開辟一個新的線程。
  
  ---- Java中實現線程的方式有兩種,一是生成Thread類的子類,並定義該子類自己的run方法,線程的操作在方法run中實現。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved