package com.cavaness.quartzbook.chapter3;
public class Data {
private String name = "unknown";
private String sex = "unknown";
private boolean bFull = false;
public synchronized void put(String name, String sex) throws InterruptedException {
if (isbFull()) {
wait();
}
this.name = name;
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
throw e;
}
this.sex = sex;
setbFull(true);
notify();
}
public synchronized void get() throws InterruptedException {
if (!isbFull()) {
wait();
}
System.out.println(name);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
throw e;
}
System.out.println(sex);
setbFull(false);
notify();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public boolean isbFull() {
return bFull;
}
public void setbFull(boolean bFull) {
this.bFull = bFull;
}
public static void main(String[] args) {
Data data = new Data();
new Thread(new Producer(data)).start();
new Thread(new Consumer(data)).start();
}
}
package com.cavaness.quartzbook.chapter3;
public class Producer implements Runnable {
private Data data;
public Producer(Data data) {
super();
this.data = data;
}
@Override
public void run() {
int index = 0;
while (true) {
if (index == 0) {
try {
data.put("zhangsan", "male");
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
data.put("lisi", "female");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
index = (index + 1) % 2;
}
}
}
package com.cavaness.quartzbook.chapter3;
public class Consumer implements Runnable {
private Data data;
public Consumer(Data data) {
super();
this.data = data;
}
@Override
public void run() {
while (true) {
try {
data.get();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}