class Info {
	private String title;
	private String content;
	private boolean flag = true;
	// flag=true:表示可以生产,但是还不能被取走
	// flag=false:表示可以被取走,但是还不可以生产
	public synchronized void set(String title, String content) {
		// 重复进入到了set()方法里面,发现不能够生产,所以要等待
		if (flag == false) {// 还没被取走,等待
			try {
				super.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.title = title;
		// try {
		// Thread.sleep(500);
		// } catch (InterruptedException e) {
		// e.printStackTrace();
		// }
		this.content = content;
		this.flag = false;// 已生产,修改标记为要取走
		super.notify();// 唤醒其它等待线程
	}
	public synchronized void get() {
		if (flag == true) {// 还没生产,等待
			try {
				super.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		// try {
		// Thread.sleep(500);
		// } catch (InterruptedException e) {
		// e.printStackTrace();
		// }
		System.out.println(this.title + "  " + this.content);
		this.flag = true;// 已取走,修改为要生产
		super.notify();
	}
}
class Productor implements Runnable {
	private Info info;
	public Productor(Info info) {
		this.info = info;
	}
	@Override
	public void run() {
		for (int x = 0; x < 150; x++) {
			if (x % 2 == 0) {
				this.info.set("王晶磊", "好学生一枚");
			} else {
				this.info.set("可爱的萌动物", "草泥马");
			}
		}
	}
}
class Customer implements Runnable {
	private Info info;
	public Customer(Info info) {
		this.info = info;
	}
	@Override
	public void run() {
		for (int x = 0; x < 150; x++) {
			this.info.get();
		}
	}
}
public class SynchronizedDemo {
	public static void main(String[] args) {
		Info info = new Info();
		new Thread(new Productor(info)).start();
		new Thread(new Customer(info)).start();
	}
}
 
                     
                    
                 
                    
                 
         
