LockSupport實現交叉列印陣列問題

2021-10-05 08:51:13 字數 1669 閱讀 7461

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...