活躍性就是指乙個併發應用程式能及時執行的能力。本小節介紹最常見的活躍度問題:死鎖(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...