public class ShareResource {
private String name;
private String gender;
private boolean isEmpty=true; //表示共享资源对象是否为空的状态
//存储数据
synchronized public void push(String name,String gender) {
try {
while(!isEmpty) {
//当前isEmpty为false的时候,不空等着消费者来获取
//使用同步锁对象来调用,表示当前线程释放同步锁,进入等待池,只能被其他线程唤醒
this.wait();
}
//------生产开始------
this.name=name;
Thread.sleep(10);
this.gender=gender;
//-----生产结束-------
isEmpty=false; //设置共享资源不为空
this.notify(); //唤醒一个消费者
}catch(Exception e) {
e.printStackTrace();
}
}
//取出数据
synchronized public void popup(){
try {
while(isEmpty) {
//当前isEmpty为false的时候,不空等着消费者来获取
//使用同步锁对象来调用,表示当前线程释放同步锁,进入等待池,只能被其他线程唤醒
this.wait();
}
Thread.sleep(10);
System.out.println(this.name+"--"+this.gender);
isEmpty=true;
this.notify();
}catch(Exception e){
e.printStackTrace();
}
}
}
public class Producer implements Runnable{
private ShareResource resourse=null;
public Producer(ShareResource resource) {
this.resourse=resource;
}
public void run() {
for(int i=0;i<500;i++) {
if(i % 2 == 0) {
resourse.push("春哥", "男");
}else {
resourse.push("凤姐", "女");
}
}
}
}
public class Consumer implements Runnable{
private ShareResource resource=null;
public Consumer(ShareResource resource) {
this.resource=resource;
}
public void run() {
for(int i=0;i<500;i++) {
resource.popup();
}
}
}
public class App {
public static void main(String[] args) {
ShareResource resource=new ShareResource();
new Thread(new Producer(resource)).start();
new Thread(new Consumer(resource)).start();
}
}
多个生产者,消费者就notify(只能唤醒任意一个线程)换成notifyAll