篮子里面放水果,默认没有水果。生产者生产水果之后进入等待状态,并通知消费者购买水果。消费者从等待状态被唤醒购买水果使篮子变空之后,又陷入等待状态并通知生产者生产水果。
篮子
package cn1;
public class Basket {
private boolean isEmpty;
public void setEmpty(boolean empty){
isEmpty = empty;
}
public boolean isEmpty(){
return isEmpty;
}
}
生产者
package cn1;
public class Producer extends Thread{
private Basket basket;
public Producer(Basket basket){
super();
this.basket = basket;
}
public void run(){
while (true){
//定义一个同步代码块
synchronized (basket){
if(!basket.isEmpty()){
//线程挂起,等待
try {
basket.wait();//现在程序处于阻塞状态
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("生产者生产水果");
basket.setEmpty(false);
//通过共享对象通知等待的线程
basket.notify();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
消费者
package cn1;
public class Consumer extends Thread {
private Basket basket;
public Consumer(Basket basket){
super();
this.basket = basket;
}
public void run(){
while (true){
//定义一个同步代码块
synchronized (basket){
if (basket.isEmpty()){
try {
basket.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("消费者购买水果");
basket.setEmpty(true);
//通过共享对象通知等待的线程
basket.notify();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
测试类
package cn1;
public class Test {
public static void main(String[] args){
Basket basket = new Basket();
Producer producer = new Producer(basket);
Consumer consumer = new Consumer(basket);
producer.start();
consumer.start();
}
}