synchronized和lock鎖的總結

2021-10-03 13:06:31 字數 969 閱讀 8863

執行緒不安全的問題怎麼解決?

synchronized和lock都能解決執行緒不安全的問題

一、synchronized

三種同步方式:同步**塊(使用自定義明鎖)、同步函式(使用this鎖)、同步靜態函式(使用位元組碼檔案,即類.class)

wait()

、notify()

、notifyall()

是三個定義在

object

類裡的方法,可以用來控制線程的狀態。

sleep()在thread類中,wait()在object類中;

sleep不會釋放鎖,而wait()則會釋放鎖,呼叫notify()後才會進入執行狀態;

二、lock

為什麼會有lock鎖?

解決了synchronized不能手動上鎖開鎖的問題

jdk1.5以上並發包 有:lock、執行緒池executors、condition

寫法為:

lock lock  = new reentrantlock();

lock.lock();

tryfinally

condition類的使用似於synchronized中的 wait()和notify(),用法如下:

condition condition = lock.newcondition();

res. condition.await(); 類似wait

res. condition. signal() 類似notify

signalall notifyall

三、synchronized和lock區別

synchronized不需要釋放鎖,lock需要開鎖釋放鎖

lockInterruptibly和lock的區別

size medium lock 拿不到lock就不罷休,不然執行緒就一直block。lockinterruptibly會優先響應執行緒中斷,處理響應的方式是丟擲interruptedexception。size 可以從原始碼看出來的 private void doacquireinterrupti...

synchronized和volatile的區別?

一旦乙個共享變數 類的成員變數 類的靜態成員變數 被volatile修飾之後,那麼就具備了兩層語義 1 保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是 立即可見的。2 禁止進行指令重排序。volatile本質是在告訴jvm當前變數在暫存器 工作...

synchronized和volatile的區別

volatile關鍵字的本質是告訴jvm,該變數在暫存器中的值是不確定的,需要在主存中讀取,而synchronized關鍵字是鎖住當前變數,只有當前執行緒可以訪問,其他執行緒等待。volatile關鍵字的作用 保證變數的可見性和防止指令重排序。1.volatile只能作用於變數,而synchroni...