package practice;
public class ThreadNotifyAll {
public static void main(String[] args) {
Object obj = new Object(); // 创建唯一的锁对象
new Thread() { // 匿名内部类创建多线程1
@Override
public void run() {
while (true) {
synchronized (obj) { // 确保等待与唤醒不同时执行
System.out.println("线程1:你好打工人!");
try {
obj.wait(); // 父类run()未抛出异常,因此wait()需自行捕捉异常
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程1被唤醒后:打工人是人上人!\n");
}
}
}
}.start();
new Thread() { // 匿名内部类创建多线程2
@Override
public void run() {
while (true) {
synchronized (obj) { // 确保等待与唤醒不同时执行
System.out.println("线程2:你好打工仔!");
try {
obj.wait(); // 父类run()未抛出异常,因此wait()需自行捕捉异常
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程2被唤醒后:打工仔吃苦中苦!\n");
}
}
}
}.start();
new Thread() { // 匿名内部类创建多线程
@Override
public void run() {
while (true) {
try {
Thread.sleep(3000); // 线程休眠3秒
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj) {
System.out.println("唤醒:线程1线程2全数苏醒,工具人开始工作!");
obj.notifyAll();
}
}
}
}.start();
}
}
运行示例: