locksupport 是乙個執行緒阻塞工具類,可以讓執行緒在任意位置阻塞或者喚醒;
陣列一:123456
陣列二:abcdef
實現兩個陣列交叉列印,也就是輸出:1a2b3c4d5e6f
實現思路:
兩個陣列,兩個執行緒,乙個執行緒輸出完了之後停止,然後讓另外乙個執行緒繼續執行;
第乙個執行緒t1拿出陣列裡面的每乙個數字來,然後列印,列印完叫醒t2,然後讓自己停止。
public
class
locksupport},
"t1");
t2 =
newthread((
)->},
"t2");
t1.start()
; t2.
start();}}
結果:
主要方法解析:
park:英譯為停車,如果把乙個執行緒比作一輛車,那麼park就是停車,停止執行緒的意思,類似wait。
locksupport.park(執行緒名t1),根據指定引數,停止執行緒t1
unpark:相反,unpark 就是啟動執行緒的意思,類似notify。
locksupport.unpark(執行緒名t2),,根據指定引數,恢復執行緒t2
public
static
void
park
(object blocker)
;// 根據引數,暫停指定執行緒
public
static
void
parknanos
(object blocker,
long nanos)
;// 暫停指定執行緒,不過有超時時間(單位:納秒)的限制
public
static
void
parkuntil
(object blocker,
long deadline)
;// 暫停指定執行緒,直到某個時間(單位:毫秒)
public
static
void
park()
;// 無期限暫停當前執行緒
public
static
void
parknanos
(long nanos)
;// 暫停當前執行緒,不過有超時時間(單位:納秒)的限制
public
static
void
parkuntil
(long deadline)
;// 暫停當前執行緒,直到某個時間(單位:毫秒)
public
static
void
unpark
(thread thread)
;// 根據引數,恢復指定執行緒
public
static object getblocker
(thread t)
;
參考文章:
或者使用golang的channel也可以實現交叉列印,原理大致相同
LockSupport使用例子
locksupport普通例子 public class locksupportpark t.start system.out.println sleep start thread.sleep 2000 system.out.println sleep end 喚醒執行緒,讓其繼續執行下去 lock...
LockSupport 詳細應用
park方法,使當前執行緒阻塞住 執行結果 當i 5的時候,執行緒阻塞,程式不往下執行 public class locksupport01 trycatch interruptedexception e t.start 在現場t還沒有阻塞之前,先呼叫了unpark方法來喚醒執行緒t,之後執行緒t才...
讀LockSupport原始碼
locksupport類是其他類實現鎖和同步的基礎 basic thread blocking primitives for creating locks and other synchronization classes.讀了原始碼就會知道,這個類主要利用了unsafe類中提供的part和unpa...