package com.yuanlief;
public class Main {
public static void main(String[] args) {
ShareData s = new ShareData();
new Consumer(s).start();
new Producer(s).start();
}
}
class MyData {
public int data;
}
class ShareData {
private MyData data;
private boolean writeable = true;
public synchronized void setShareData(MyData data){
if(!writeable){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.data = data;
writeable = false;
notify();
}
public synchronized MyData getShareData() {
if (writeable){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
writeable = true;
notify();
return this.data;
}
}
/**
* 生产者线程类
*/
class Producer extends Thread {
private ShareData s;
Producer(ShareData s){
this.s = s;
}
@Override
public void run() {
for (int i = 1;i <= 10;i++){
try {
Thread.sleep((int) (Math.random() * 10));
} catch (InterruptedException e) {
e.printStackTrace();
}
MyData myData = new MyData();
myData.data = i;
s.setShareData(myData);
System.out.print("生产者产生一条数据:" + myData.data + ".\n");
}
}
}
/**
* 消费者线程类
*/
class Consumer extends Thread {
private ShareData s;
Consumer(ShareData s) {
this.s = s;
}
@Override
public void run() {
MyData myData;
do {
try {
Thread.sleep((int) (Math.random() * 10));
} catch (InterruptedException e) {
e.printStackTrace();
}
myData = s.getShareData();
System.out.print("消费者消费一条数据:" + myData.data + ".\n");
}while (myData.data <= 10);
}
}