LockSupport 詳細應用

2021-10-16 10:39:03 字數 1251 閱讀 9387

park方法,使當前執行緒阻塞住

**執行結果:當i=5的時候,執行緒阻塞,程式不往下執行

public

class

locksupport01

trycatch

(interruptedexception e)}}

);t.

start()

;}}

在現場t還沒有阻塞之前,先呼叫了unpark方法來喚醒執行緒t, 之後執行緒t才啟動park來阻塞,但是以我已經unpark了,所以程式並沒有被阻塞, locksupport.unpark方法可以先park方法執行

執行結果:執行緒並未阻塞,可正常執行

public

class

locksupport02

trycatch

(interruptedexception e)}}

);t.

start()

;//喚醒執行緒t

locksupport.

unpark

(t);

}}

雖然locksupport.unpark方法可以先park方法執行, 當時unpark執行了一次,park執行了兩次,程式在跑道i=8的時候阻塞了, 可以這樣理解,執行緒在執行park的時候,發現手上有塊unpark的免死金牌(不阻塞), 然後就用這個讓他繼續往前走,但是這個令牌給用了,當前手裡沒有了, 又再次遇到乙個park的時候,完了,沒有令牌了,只有在這等著了(阻塞)

public

class

locksupport03

if(i ==8)

trycatch

(interruptedexception e)}}

);t.

start()

;//喚醒執行緒t

locksupport.

unpark

(t);

}}

1.locksupport不需要synchorized加鎖就可以實現執行緒的阻塞和喚醒

2.uupark可以先於park執行,並且執行緒不會被阻塞

3.如果乙個執行緒處於等待狀態,兩次park,則永遠不被喚醒

4.park和unpark的底層是實現了unsafe類,它是同乙個變數作為標識,變數值在0和1之間切換,當這個變數大於0時,就獲得令牌

LockSupport使用例子

locksupport普通例子 public class locksupportpark t.start system.out.println sleep start thread.sleep 2000 system.out.println sleep end 喚醒執行緒,讓其繼續執行下去 lock...

讀LockSupport原始碼

locksupport類是其他類實現鎖和同步的基礎 basic thread blocking primitives for creating locks and other synchronization classes.讀了原始碼就會知道,這個類主要利用了unsafe類中提供的part和unpa...

LockSupport 工具相關整理

locksupport 中的park 和unpark 的作用分別是阻塞執行緒和解除阻塞執行緒,而且park 和unpark 不會遇到 thread.suspend 和 thread.resume 所可能引發的死鎖問題。返回提供給最近一次尚未解除阻塞的 park 方法呼叫的 blocker 物件,如果...