举例1:wait(5000)
public class Demo{
public static void main(String[] args){
//顾客
new Thread(){
@Override
public void run() {
// 保证等待和唤醒的线程只有一个执行,需要使用同步技术
synchronized (obj) {
System.out.println("我要两个猪肉大葱的包子");
try {
// 当五秒过后没有被唤醒时则自动唤醒
obj.wait(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 唤醒之后的代码
System.out.println("你的包子好了");
}
}
}.start();
}
}
举例2:notifyAll()
public class Demo{
public static void main(String[] args){
// 顾客1
new Thread(){
@Override
public void run() {
// 保证等待和唤醒的线程只有一个执行,需要使用同步技术
synchronized (obj) {
System.out.println("李四要两个猪肉大葱的包子");
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 唤醒之后的代码
System.out.println("李四你的包子好了");
}
}
}.start();
// 顾客2
new Thread(){
@Override
public void run() {
// 保证等待和唤醒的线程只有一个执行,需要使用同步技术
synchronized (obj) {
System.out.println("张三要两个猪肉大葱的包子");
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 唤醒之后的代码
System.out.println("张三你的包子好了");
}
}
}.start();
// 老板
new Thread(){
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 保证等待和唤醒之后的线程只有一个执行,需要使用同步技术
synchronized (obj){
System.out.println("包子花费了5秒钟之后做好了可以告知顾客了");
//notify()是随机唤醒一个
obj.notifyAll();
}
}
}.start();
}
}