多執行緒05 執行緒同步

2021-09-24 05:24:50 字數 1720 閱讀 3140

1、執行緒同步

2、執行緒不安全案例

public

class

testthreadsynchronized

}class

ticketwindow

implements

runnable

}private

void

buy(

)try

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+"**了"

+ ticketnum--

+"張票");

}}輸出:張三**了9張票

王五**了10張票

李四**了8張票

王五**了7張票

李四**了6張票

張三**了5張票

王五**了4張票

張三**了3張票

李四**了2張票

王五**了1張票

張三**了0張票

李四**了-

1張票

3、證明 arraylist 是不安全的案例

public

class

unsafelist

trycatch

(interruptedexception e)

system.out.

println

(list.

size()

);}}

// 額外知識

public

class

testjuc).

start()

;}trycatch

(interruptedexception e)

system.out.

println

(list.

size()

);}}

4、執行緒同步實現方式一:同步方法,預設鎖的是this(物件的本身)

// 同步方法,使執行緒安全

private

synchronized

void

buy(

)try

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+"**了"

+ ticketnum--

+"張票");

}

5、執行緒同步實現方式二:同步**塊

public

class

unsafelist})

.start()

;}// 這裡不延遲,主線程會提前跑完

trycatch

(interruptedexception e)

system.out.

println

(list.

size()

);}}

總結:

05 執行緒同步

引入 兩人同時取同一賬戶的錢 兩個執行緒訪問同一資源,程序之間協調的問題 解決 在程序訪問獨佔資源時先鎖定再訪問 synchronized 最好只鎖定乙個物件 加鎖過程中 乙個方法做了同步 加鎖 另乙個方法沒有做同步 別的執行緒可以訪問沒做同步的方法 並且能影響已經同步的方法,要保護需要的同步的物件...

05 執行緒同步

引入 兩人同時取同一賬戶的錢 兩個執行緒訪問同一資源,程序之間協調的問題 解決 在程序訪問獨佔資源時先鎖定再訪問 synchronized 最好只鎖定乙個物件 加鎖過程中 乙個方法做了同步 加鎖 另乙個方法沒有做同步 別的執行緒可以訪問沒做同步的方法 並且能影響已經同步的方法,要保護需要的同步的物件...

多執行緒同步

synchronized 物件 其中物件相當於乙個標誌 鎖 用於判斷 同步 塊 同步的前提必須是兩個或兩個以上的執行緒,且共用同乙個鎖 同步解決了多執行緒的安全問題 弊端 多執行緒需要判斷鎖,消耗了資源 同步函式 將synchronized放在函式名前面即可 即具有同步性質 使用的鎖是this 靜態...