本文将介绍Java中的线程间通信:wait()方法、notify()方法、notifyAll()方法,并提供具体的代码案例,适合编程小白学习。通过本文的学习,你将能够更好地理解Java中线程通信的原理和实现方式。
wait()方法是Object类中的方法,用于使当前线程进入等待状态,直到另一线程调用notify()或notifyAll()方法唤醒该线程。
wait()方法的语法如下:
public final void wait() throws InterruptedException
其中,wait()方法不带任何参数,调用该方法的线程将一直等待,直到其他线程调用notify()或notifyAll()方法唤醒它。
下面是一个wait()方法的示例:
synchronized (lock) {
while (condition) {
lock.wait();
}
// do something
}在上面的示例中,调用wait()方法的线程将一直等待,直到其他线程调用notify()或notifyAll()方法唤醒它。
notify()方法是Object类中的方法,用于唤醒一个在等待状态中的线程。如果有多个线程在等待,只有其中一个线程会被唤醒。
notify()方法的语法如下:
public final void notify()
下面是一个notify()方法的示例:
synchronized (lock) {
condition = false;
lock.notify();
}在上面的示例中,调用notify()方法将唤醒一个在等待状态中的线程。
notifyAll()方法是Object类中的方法,用于唤醒所有在等待状态中的线程。
notifyAll()方法的语法如下:
public final void notifyAll()
下面是一个notifyAll()方法的示例:
synchronized (lock) {
condition = false;
lock.notifyAll();
}在上面的示例中,调用notifyAll()方法将唤醒所有在等待状态中的线程。
下面是一个使用wait()、notify()和notifyAll()方法实现线程间通信的示例代码:
public class ThreadCommunication {
public static void main(String[] args) {
Object lock = new Object();
boolean condition = true;
Thread t1 = new Thread(() -> {
synchronized (lock) {
while (condition) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Thread 1 is running.");
}
});
Thread t2 = new Thread(() -> {
synchronized (lock) {
while (condition) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Thread 2 is running.");
}
});
t1.start();
t2.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock) {
condition = false;
lock.notifyAll();
}
}
}在上面的示例代码中,我们创建了两个线程t1和t2,这两个线程都会等待condition变量的改变。在主线程中,我们将condition变量的值改变,并调用lock.notifyAll()方法,唤醒等待的线程t1和t2。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com
