筆記《Oracle官方併發教程》4 活躍度

2021-09-25 18:28:39 字數 1022 閱讀 9321

活躍性就是指乙個併發應用程式能及時執行的能力。本小節介紹最常見的活躍度問題:死鎖(deadlock)。還有飢餓(starvation)和活鎖(livelock)。

死鎖就是說,兩個或多個執行緒相互阻塞,都在等待對方釋放資源。

例如,兩個朋友鞠躬,a向b鞠躬時,必須保持姿勢,直到b向a回鞠躬。這個時候,如果兩個人同時鞠躬,那麼就死鎖了。

例子如下,本質上是,a同步方法持有物件內部鎖,a呼叫b同步方法,而b同步方法跟a方法處於同乙個物件,是需要請求該物件的同步鎖的,同步鎖又在a拿著,就死鎖了:

static

class

friend

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()

;}}

這兩種情況沒有死鎖普遍,不過也可能遇到。

飢餓就是說,乙個執行緒不能正常的訪問共享資源,或者不能正常執行。比如說,共享資源被其他執行緒長期占用,自己很少有訪問的機會。

活鎖乙個執行緒通常會有會響應其他執行緒的活動。如果其他執行緒也會響應另乙個執行緒的活動,那麼就有可能發生活鎖。同死鎖一樣,發生活鎖的執行緒無法繼續執行。然而執行緒並沒有阻塞——他們在忙於響應對方無法恢復工作。這就相當於兩個在走廊相遇的人:alphonse向他自己的左邊靠想讓gaston過去,而gaston向他的右邊靠想讓alphonse過去。可見他們阻塞了對方。alphonse向他的右邊靠,而gaston向他的左邊靠,他們還是阻塞了對方。

Oracle官方併發教程之活躍度

乙個併發應用程式能及時執行的能力稱為活躍性。本節將介紹最常見的活躍性問題 死鎖 deadlock 以及另外兩個活躍性問題 飢餓 starvation 和活鎖 livelock 死鎖描述了這樣一種情景,兩個或多個執行緒永久阻塞,互相等待對方釋放資源。下面是乙個例子。alphone和gaston是朋友,...

python 官方教程 學習4

2018 10 31 20 27 01 類是資料與函式結合在一起,建立乙個新類的同時也就建立了乙個新的物件型別,從而允許建立該型別的新例項。類可以附加自己的屬性,也可以有修改自己的方法。類的特點 1 可以多個基類繼承機制 2 派生出來的類可以重寫基類的方法,名字可以和基類的方法一樣 3 物件可以是包...

Apache HttpCore官方教程筆記

httpcore是對http協議的基礎封裝的一套元件。乙個http訊息包含header和可選的body.請求頭 request header 由乙個請求行和一系列的頭字段組成。響應頭 response header 由乙個狀態行和一系列的頭字段組成。http訊息必須包含http版本。get http...