·限时等待
1、sleep(xxx)
线程等待固定时间后自动唤醒,进入Run或者Blocked状态
2、wait(XXX)
线程在等待一定时间后,还没有收到notify指令,也自动唤醒,进入Run或者Blocked状态
3、notifyAll()
方法可以唤醒所有和锁对象有关的线程
public class Demo02WaitAndNotify {
public static void main(String[] args) {
Object obj = new Object();
//顾客1线程
new Thread(){
@Override
public void run() {
synchronized (obj){
System.out.println("顾客1说:老板,我要一杯橙汁");
try {
obj.wait();
System.out.println("顾客1说:好的,谢谢老板,橙汁真好喝!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
//顾客2线程
new Thread(){
@Override
public void run() {
synchronized (obj){
System.out.println("顾客2说:老板,我要一杯橙汁");
try {
obj.wait();
System.out.println("顾客2说:好的,谢谢老板,橙汁真好喝!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
//老板线程
new Thread(){
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj){
System.out.println("亲,你好,你的橙汁好了,给你!");
//obj.notify();
//如果要唤醒所有和obj有关线程,使用
obj.notifyAll();
}
}
}.start();
}
}