Java 教程(併發活性)

2021-09-12 21:49:08 字數 1082 閱讀 4488

併發應用程式及時執行的能力被稱為其活性,本節描述了最常見的活性問題,死鎖,並繼續簡要描述其他兩個活性問題,飢餓和活鎖。

死鎖描述了兩個或多個執行緒永遠被阻塞,等待彼此的情況,這是乙個例子。

alphonse和gaston是朋友,是禮貌的忠實信徒,禮貌的乙個嚴格規則是,當你向朋友鞠躬時,你必須一直鞠躬,直到你的朋友有機會還禮,不幸的是,這條規則沒有考慮到兩個朋友可能同時互相鞠躬的可能性,這個示例應用程式deadlock模擬了這種可能性:

public class deadlock 

public string getname()

public synchronized void bow(friend bower)

public synchronized void bowback(friend bower)

}public static void main(string args)

}).start();

new thread(new runnable()

}).start();

}}

deadlock執行時,兩個執行緒在嘗試呼叫bowback時極有可能會阻塞,兩個阻塞都不會結束,因為每個執行緒都在等待另乙個執行緒退出bow

飢餓和活鎖問題遠沒有死鎖常見,但仍然是每個併發軟體設計人員可能遇到的問題。

飢餓描述了一種情況,即執行緒無法獲得對共享資源的定期訪問,並且無法取得進展,當「貪婪」執行緒使共享資源長時間不可用時會發生這種情況。例如,假設乙個物件提供了乙個通常需要很長時間才能返回的同步方法,如果乙個執行緒頻繁地呼叫此方法,其他也需要頻繁同步訪問同一物件的執行緒將經常被阻塞。

乙個執行緒經常響應另乙個執行緒的操作,如果另乙個執行緒的操作也是對另乙個執行緒的操作的響應,則可能導致活鎖。與死鎖一樣,活鎖線程無法取得進一步進展,但是,執行緒不會被阻塞 — 它們只是太忙於回應彼此而無法繼續工作。這相當於兩個試圖在走廊裡互相通過的人:alphonse向左移動讓gaston通過,而gaston向右移動讓alphonse通過,看到他們仍然互相阻塞,alphone向右移動,而gaston向左移動,他們還在互相阻塞,所以...。

Java併發程式設計 5 活性

不正確的使用互斥技術會導致各種活性問題。所謂程式活性是指併發應用程式能夠按時完成動作的能力。常見活性問題主要有死鎖 deadlock 飢餓 starvation 和活鎖 livelock 死鎖 死鎖是指多個執行緒為競爭某些共享資源而陷入無限等待狀態。假如有條禮貌規則是,當你向朋友鞠躬時,你要一直彎著...

Java併發程式設計教程

1 使用執行緒的經驗 設定名稱 響應中斷 使用threadlocal 2 executor executorservice和future 3 阻塞佇列 put和take offer和poll drainto 4 執行緒間的協調手段 lock condition wait notify notifya...

Java併發程式設計教程

多執行緒程式包含兩個或多個可同時執行的部分,每個部分可以同時處理不同的任務,從而能更好地利用可用資源,特別是當您的計算機有多個cpu時。多執行緒使您能夠寫入多個活動,可以在同一程式中同時進行操作處理。新執行緒 new 新執行緒在新的狀態下開始其生命週期。直到程式啟動執行緒為止,它保持在這種狀態。它也...