package com.cavaness.quartzbook.chapter3;
public class Data {
private String name = "unknown";
private String sex = "unknown";
private boolean bFull = false;
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) {
synchronized (data) {
if (data.isbFull()) {
try {
data.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (index == 0) {
data.setName("zhangsan");
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
data.setSex("male");
} else {
data.setName("lisi");
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
data.setSex("female");
}
data.setbFull(true);
data.notify();
}
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) {
synchronized (data) {
if (!data.isbFull()) {
try {
data.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(data.getName());
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(data.getSex());
data.setbFull(false);
data.notify();
}
}
}
}