熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

java線程簡介(無處不在的線程)

2022-06-13   來源: Java高級技術 

  誰創建線程?
  
  
  即使您從未顯式地創建一個新線程您仍可能會發現自己在使用線程線程被從各種來源中引入到我們的程序中
  
  有許多工具可以為您創建線程如果要使用這些工具應該了解線程如何交互以及如何防止線程互相干擾
  
  AWT 和 Swing
  
  
  任何使用 AWT 或 Swing 的程序都必須處理線程AWT 工具箱創建單個線程用於處理 UI 事件任何由 AWT 事件調用的事件偵聽器都在 AWT 事件線程中執行
  
  您不僅必須關心同步對事件偵聽器和其它線程之間共享的數據項的訪問而且還必須找到一種方法讓由事件偵聽器觸發的長時間運行任務(如在大文檔中檢查拼寫或在文件系統中搜索一個文件) 在後台線程中運行這樣當該任務運行時UI 就不會停滯了(這可能還會阻止用戶取消操作)這樣做的一個好的框架示例是 SwingWorker 類
  AWT 事件線程並不是守護程序線程這就是通常使用 Systemexit() 結束 AWT 和 Swing 應用程序的原因
  
  
  使用 TimerTask
  
  
  JDK TimerTask 工具被引入到 Java 語言這個便利的工具讓您可以稍後在某個時間執行任務(例如即從現在起十秒後運行一次任務)或者定期執行任務(即每隔十秒運行任務)
  
  實現 Timer 類非常簡單它創建一個計時器線程並且構建一個按執行時間排序的等待事件隊列
  
  TimerTask 線程被標記成守護程序線程這樣它就不會阻止程序退出
  
  因為計時器事件是在計時器線程中執行所以必須確保正確同步了針對計時器任務中使用的任何數據項的訪問
  
  在 CalculatePrimes 示例中並沒有讓主線程休眠我們可以使用 TimerTask方法如下
  
  
   public static void main(String[] args) {
   Timer timer = new Timer();
  
   final CalculatePrimes calculator = new CalculatePrimes();
   calculatorstart();
  
   timerschedule(
   new TimerTask() {
   public void run()
   {
   calculatorfinished = true;
   }
   } TEN_SECONDS);
   }
  
  servlet 和 JavaServer Pages 技術
  
  
  servlet 容器創建多個線程在這些線程中執行 servlet 請求作為 servlet 編寫者您不知道(也不應該知道)您的請求會在什麼線程中執行如果同時有多個對相同 URL 的請求入站那麼同一個 servlet 可能會同時在多個線程中是活動的
  
  當編寫 servlet 或 JavaServer Pages (JSP) 文件時必須始終假設可以在多個線程中並發地執行同一個 servlet 或 JSP 文件必須適當同步 servlet 或 JSP 文件訪問的任何共享數據這包括 servlet 對象本身的字段
  
  
  實現 RMI 對象
  
  
  RMI 工具可以讓您調用對在其它 JVM 中運行的對象進行的操作當調用遠程方法時RMI 編譯器創建的 RMI 存根會打包方法參數並通過網絡將它們發送到遠程系統然後遠程系統會將它們解包並調用遠程方法
  
  假設您創建了一個 RMI 對象並將它注冊到 RMI 注冊表或者 Java 命名和目錄接口(Java Naming and Directory Interface (JNDI))名稱空間當遠程客戶機調用其中的一個方法時該方法會在什麼線程中執行呢?
  
  實現 RMI 對象的常用方法是繼承 UnicastRemoteObject在構造 UnicastRemoteObject 時會初始化用於分派遠程方法調用的基礎結構這包括用於接收遠程調用請求的套接字偵聽器和一個或多個執行遠程請求的線程
  
  所以當接收到執行 RMI 方法的請求時這些方法將在 RMI 管理的線程中執行
  
  小結
  
  
  線程通過幾種機制進入 Java 程序除了用 Thread 構造器中顯式創建線程之外還可以用許多其它機制創建線程
  
  AWT 和 Swing
  RMI
  javautilTimerTask 工具
  servlet 和 JSP 技術
  

From:http://tw.wingwit.com/Article/program/Java/gj/201311/27548.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.