Java中如何喚醒“指定的“執行緒
阿新 • • 發佈:2021-02-17
熟悉執行緒操作的小夥伴應該知道,Java中執行緒的掛起和喚醒一般用synchronized + wait + notify完成。
比如:
synchronized(o) {
o.wait(); //wait狀態
}
在其他執行緒中o.notify(),就可以喚醒在o上wait的執行緒。
可是如果o上有多個執行緒wait,是沒有辦法喚醒“指定”的某個執行緒的。
不過,Java6之後,轉機來了,Java6引入了LockSupport這個類,好了,廢話不多說,我們直接上程式碼:
public class Test {
public static void main(String[] args) throws Exception {
Thread t = new Thread(()->{
System.out.println("start");
LockSupport.park(); //一直wait
System.out.println("continue");
});
t.start();
Thread.sleep(1000);
LockSupport. unpark(t); //指定t執行緒解除wait態
}
}
如上所述,LockSupport的park可以讓當前執行緒進入wait狀態,
而unpark可以解除指定執行緒的wait態,不需要擁有某個物件的特定鎖,
是不是比sync/wait/notify的組合靈活多了呢?
文章會持續更新,歡迎大家關注和收藏哦!
大家也可以關注我的公眾號:網際網路架構師修煉之道
會有更多的驚喜呢!