java线程唤醒线程_Java中如何唤醒“指定的“某个线程
群里有學(xué)C#轉(zhuǎn)Java的小朋友問(wèn):Java中有木有一個(gè)辦法喚醒一個(gè)“指定的”線程。
熟悉線程操作的小朋友應(yīng)該知道,Java中線程的掛起和喚醒一般用synchronized + wait + notify完成。
比如:
synchronized(o) {
o.wait(); //wait狀態(tài)
}
在其他線程中o.notify(),就可以喚醒在o上wait的線程。
可是如果o上有多個(gè)線程wait,是沒(méi)有辦法喚醒“指定”的某個(gè)線程的。
不過(guò),Java6之后,轉(zhuǎn)機(jī)來(lái)了,Java6引入了LockSupport這個(gè)類(lèi)。
看代碼:
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態(tài)
}
}
如上所述,LockSupport的park可以讓當(dāng)前線程進(jìn)入wait狀態(tài),
而unpark可以解除指定線程的wait態(tài),不需要擁有某個(gè)對(duì)象的特定鎖,
是不是比sync/wait/notify的組合靈活多了呢?
總結(jié)
以上是生活随笔為你收集整理的java线程唤醒线程_Java中如何唤醒“指定的“某个线程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 下载excel xlsx_JA
- 下一篇: java字数统计_java统计字数