1. 程式人生 > >Java核心技術 卷I 基礎知識 學習筆記(9)

Java核心技術 卷I 基礎知識 學習筆記(9)

參考:Java核心技術 卷I 基礎知識 第十四章

多程序與多執行緒有哪些區別呢?本質的區別在於每個程序擁有自己的一整套變數,而執行緒則共享資料。似乎有些風險,但是共享變數使執行緒之間的通訊比程序之間的通訊更有效、更容易。在有些作業系統中,與程序相比,執行緒更輕量級,建立、撤銷一個執行緒比啟動新程序的開銷要小的多。

執行緒可以有的狀態:new、runnable、blocked、waiting、timedwaiting、terminated。

守護執行緒,可以通過呼叫t.setDaemon(true)將執行緒轉換為守護執行緒。守護執行緒唯一用途是為其他執行緒提供服務。

將靜態方法宣告為synchronized也是合法的,如果呼叫這種方法,該方法獲得相關的類物件的內部鎖。例如,如果Bank類有一個靜態同步的方法,那麼當該方法被呼叫時,Bank.class物件的鎖被鎖住,因此,沒有其他執行緒可以呼叫同一個類的這個或者任何其他的同步靜態方法。

內部鎖和條件存在一些侷限。包括:

  • 不能中斷一個正在試圖獲得鎖的執行緒
  • 試圖獲得鎖時不能超市
  • 每個鎖僅有單一的條件,可能是不夠的

在程式碼中應該使用哪一種?Lock、Condition物件還是同步方法?

  • 最好既不使用Lock/Condition也不使用synchronized關鍵字。在許多情況下可以使用java.util.concurrent包中的一種機制,他會為你處理所有的加鎖。
  • 如果synchronized關鍵字適合你的程式,那麼儘量使用它,這樣可以減少編寫的程式碼數量,減少出錯的機率。
  • 如果特別需要Lock/Condition結構提供的獨有特性時,才使用Lock/Condition.