线程有5个状态:
新建(new):刚刚创建出来的线程
阻塞(block):正在等待锁对象的线程(没有抢夺到锁对象)
睡眠(waitting):处于无限等待状态,只有调用notify方法才能唤醒
暂停(sleep):自动放弃cpu的控制
销毁(terminated):结束线程
//等待唤醒机制的通信
/* 顾客告知(notify)老板 要买什么包子
老板开始做包子,顾客进入Waiting状态
做好包子之后,老板告知(notify)顾客,顾客开始吃包子
老板进入waiting状态,等待顾客notify要什么包子
*/
//代码实现
/*
需要两个对象,一个顾客,一个老板
然后用同步机制保证顾客和老板 等待和唤醒只能有一个在执行
notify 和 wait 方法是通过对象来调用的
*/
public static void main(Stringp[] args){
//创建 一个锁对象
Object obj = new Object();
new Thread(){
@override
publice void run(){
while(true){
//保证同步
synchronized(obj){
// 顾客告知(notify)老板 要买什么包子 顾客进入waitting状态
obj.wait();
System.out.println("包子做好了,开吃");
}
}
}
}.start();
new Thread(){
@override
publice void run(){
while(true){
//保证同步
synchronized(obj){
//花费5秒做包子
obj.sleep(5000);
// 做好包子之后,老板告知(notify)顾客,顾客开始吃包子
obj.notify();
}
}
}
}.start();
}