欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java wait和notify6

榮姿康1年前9瀏覽0評論

Java中的多線程通信是一種常見的場景,wait()和notify()方法是使線程間通信的重要方式之一。wait()方法用于將線程掛起,等待notify()方法的喚醒,并且釋放持有的鎖;notify()方法用于喚醒一個(gè)處于wait()狀態(tài)的線程。在JDK 1.5版本后,增加了wait()和notify()的變種wait(long timeout)和notifyAll(),分別可以設(shè)定等待時(shí)間和喚醒所有處于等待狀態(tài)的線程。

// 模擬線程通信 #
class ThreadA implements Runnable {
public void run() {
synchronized(this) {
System.out.println("ThreadA開始執(zhí)行");
try {
// 調(diào)用wait()方法掛起線程
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ThreadA恢復(fù)執(zhí)行");
}
}
}
class ThreadB implements Runnable {
ThreadA threadA;
public ThreadB(ThreadA threadA) {
this.threadA = threadA;
}
public void run() {
synchronized(this.threadA) {
System.out.println("ThreadB開始執(zhí)行,喚醒ThreadA");
// 調(diào)用notify()方法喚醒線程
this.threadA.notify();
System.out.println("ThreadB執(zhí)行結(jié)束");
}
}
}
public class WaitAndNotifyDemo {
public static void main(String[] args) {
ThreadA threadA = new ThreadA();
ThreadB threadB = new ThreadB(threadA);
new Thread(threadA).start();
new Thread(threadB).start();
}
}

以上代碼演示了一個(gè)簡單的wait()和notify()的使用場景,其中ThreadA線程在執(zhí)行到wait()方法后,被掛起,等待ThreadB向其發(fā)送喚醒信號(hào);ThreadB線程執(zhí)行后調(diào)用notify()方法喚醒ThreadA,并且釋放ThreadA持有的鎖,使其恢復(fù)執(zhí)行。

需要注意的是,wait()和notify()方法必須在同步塊或同步方法中使用,且wait()方法釋放了對象的鎖。如果調(diào)用wait()方法的線程無法被其他線程發(fā)出喚醒信號(hào),那么它將一直處于等待狀態(tài),這有可能導(dǎo)致死鎖。因此,在使用wait()和notify()方法時(shí)需要慎重考慮。