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

java線程簡介(其它線程API詳細信息)

2013-11-23 19:50:46  來源: Java高級技術 

  wait()notify() 和 notifyAll() 方法
  
  
  除了使用輪詢(它可能消耗大量 CPU 資源而且具有計時不精確的特征)Object 類還包括一些方法可以讓線程相互通知事件的發生
  
  Object 類定義了 wait()notify() 和 notifyAll() 方法要執行這些方法必須擁有相關對象的鎖
  
  Wait() 會讓調用線程休眠直到用 Threadinterrupt() 中斷它過了指定的時間或者另一個線程用 notify() 或 notifyAll() 喚醒它
  
  當對某個對象調用 notify() 時如果有任何線程正在通過 wait() 等待該對象那麼就會喚醒其中一個線程當對某個對象調用 notifyAll() 時會喚醒所有正在等待該對象的線程
  
  這些方法是更復雜的鎖定排隊和並發性代碼的構件但是notify() 和 notifyAll() 的使用很復雜尤其是使用 notify() 來代替 notifyAll() 是有風險的除非您確實知道正在做什麼否則就使用 notifyAll()
  
  與其使用 wait() 和 notify() 來編寫您自己的調度程序線程池隊列和鎖倒不如使用 ncurrent 包(請參閱參考資料)這是一個被廣泛使用的開放源碼工具箱裡面都是有用的並發性實用程序JDK 將包括 ncurrent 包它的許多類都派生自 ncurrent
  
  線程優先級
  
  
  Thread API 讓您可以將執行優先級與每個線程關聯起來但是這些優先級如何映射到底層操作系統調度程序取決於實現在某些實現中多個 — 甚至全部 — 優先級可能被映射成相同的底層操作系統優先級
  
  在遇到諸如死鎖資源匮乏或其它意外的調度特征問題時許多人都想要調整線程優先級但是通常這樣只會把問題移到別的地方大多數程序應該完全避免更改線程優先級
  
  線程組
  
  
  ThreadGroup 類原本旨在用於把線程集合構造成組但是結果證明 ThreadGroup 並沒有那樣有用您最好只使用 Thread 中的等價方法
  
  ThreadGroup 確實提供了一個有用的功能部件(Thread 中目前還沒有)uncaughtException() 方法線程組中的某個線程由於拋出了未捕獲的異常而退出時會調用 ThreadGroupuncaughtException() 方法這就讓您有機會關閉系統將一條消息寫到日志文件或者重新啟動失敗的服務
  
  SwingUtilities
  
  
  雖然 SwingUtilities 類不是 Thread API 的一部分但還是值得簡單提一下
  
  正如前面提到的Swing 應用程序有一個 UI 線程(有時叫稱為事件線程)所有 UI 活動都必須在這個線程中發生有時另一個線程也許想要更新屏幕上某樣東西的外觀或者觸發 Swing 對象上的一個事件
  
  SwingUtilitiesinvokeLater() 方法可以讓您將 Runnable 對象傳送給它並且在事件線程中執行指定的 Runnable它的同類 invokeAndWait() 會在事件線程中調用 Runnable但 invokeAndWait() 會阻塞直到 Runnable 完成執行之後
  
  
  void showHelloThereDialog() throws Exception {
   Runnable showModalDialog = new Runnable() {
   public void run() {
   JOptionPaneshowMessageDialog(myMainFrame Hello There);
   }
   };
   SwingUtilitiesinvokeLater(showModalDialog);
  }
  
  
  對於 AWT 應用程序javaawtEventQueue 還提供了 invokeLater() 和 invokeAndWait()
  

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