public class Main {
public static void main(String[] args) {
Object obj = new Object();//生成一个对象锁
//消费者线程
new Thread(){
@Override
public void run(){
while (true)
{
synchronized (obj)
{
try {
System.out.println("消费者:生产者,给我一件物品");
obj.wait();//等待生产者
System.out.println("消费者:收到了谢谢");
System.out.println("===========");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}.start();
//生产者线程
new Thread(){
@Override
public void run(){
while (true)
{
try {
Thread.sleep(1000);//每过1秒生产出一件物品
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj)
{
System.out.println("生产者:给你");
obj.notify();//唤醒消费者
}
}
}
}.start();
}
}
输出结果如下:
注意事项:
1.消费者和生产者线程必须使用同步代码块包裹起来,保证等待和唤醒只能有一个在执行
2.同步使用的锁对象必须保证唯一
3.只有锁对象才能调用wait和notify