package wan;
class wano {
public static void main(String[] args) throws java.lang.Exception {
Share sh = new Share();
new Thread(new Producer(sh)).start();//同时启动两个线程
new Thread(new Consumer(sh)).start();
}
}
class Share {
char ch; //设定ch为全局变量,在整个类中可以用,用于存放生产了的数据给消费调用。
boolean flag = false;
public synchronized void set() {
char[] cha = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
for (char chari : cha) { //等待和唤醒必须写在for循环里面
if (flag) {
try {
wait(); //等待消费取数
} catch (InterruptedException e) {
}
}
this.ch = chari;
flag = true;
notify(); //唤醒消费程序
}
}
public synchronized void get() {
if (!flag) {
try {
wait(); //等待生成
} catch (InterruptedException e) {
}
}
System.out.println("ch = " + this.ch);
flag = false;
notify(); //唤醒生产程序
}
}
class Producer implements Runnable {
Share sh = null;
public Producer(Share sh) {
this.sh = sh;
}
public void run() {
this.sh.set();
}
}
class Consumer implements Runnable {
Share sh = null;
public Consumer(Share sh) {
this.sh = sh;
}
public void run() {
for (int i = 0; i < 4; i++)
this.sh.get();
}
}