1. 程式人生 > >並發_002 鎖的概念

並發_002 鎖的概念

概念 互斥鎖 上下文切換 12px 訪問 對象 個數 讓其 等待

對象鎖  針對獨享,它只是在該對象的某個內存位置聲明一個標誌該對象是否擁有鎖,所以它只會鎖住當前的對象

類鎖   鎖住整個類,當有多個線程來聲明這個類的對象時將會被阻塞,直到擁有這個類鎖的對象被銷毀或者主動是否了類鎖

公平鎖 多個線程在等待同一個鎖時,必須按照申請鎖的時間來一次獲得鎖

非公平鎖 多個線程獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的的線程比先申請的線程優先獲得鎖(有可能會造成優先級反轉或饑餓現象)

可重入鎖 是指在同一個線程在外層獲取鎖的時候,在進入內層方法會自動獲取鎖

獨占鎖 是指該鎖一次只能被一個線程所持有

共享鎖 是指該鎖可被多個線程所持有

互斥鎖 概念似獨占

讀寫鎖 讀寫互斥,寫寫互斥,讀不互斥

悲觀鎖 認為對於同一個數據的並發操作,一定是會發生修改的,哪怕沒有修改,也會認為修改,悲觀的認為,不加鎖的並發操作一定會出問題

樂觀鎖 認為對於同一個數據的並發操作,是不會發生修改的,在更新數據的時候,會采用嘗試更新,不斷重試的方式更新數據,樂觀的認為,不加鎖的並發操作是沒有事情的

分段鎖 是一種設計,分段鎖的設計目的是細化鎖的粒度,當操作不需要更新整個數組的時候,就僅僅針對數組中的一項進行加鎖操作

偏向鎖 是指同一段同步代碼一直被一個線程所訪問,那麽該線程會自動獲取鎖,降低鎖的代價

輕量級鎖 當鎖是偏向鎖時,被另一個線程所訪問,偏向就會升級為輕量級鎖,其它線程會通過自旋的形式獲取鎖,不會阻塞,提高性能

重量級鎖 鎖是輕量級鎖的時候,另一個線程雖然是自旋,但自旋不會一直持續下去,當自旋一定次數的時候,還沒有獲取到鎖,就會進入阻塞,該鎖膨脹為重量級鎖,重量級鎖會讓其它申請的線程進入阻塞,性能降低

自旋鎖 指嘗試獲取鎖的線程不會立即阻塞,而是采用循環的方式去嘗試獲取鎖,這樣的好處是減少線程上下文切換的消耗,缺點是循環會消耗CPU

並發_002 鎖的概念