1.首先是资源类
/**
* 资源类
*/
public class Res {
private String userName;
private String sex;
// true 生产者等待,消费者消费
private Boolean flag = true;
....
get/set方法
....
}
2.生产者类
/*
* 生产者类
*/
public class Product extends Thread {
Res res;
Boolean flag = false;
public Product(Res res) {
this.res = res;
}
@Override
public void run() {
int count = 0;
while (true) {
synchronized (res) {
if (res.getFlag()) {
try {
res.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (count == 0) {
res.setUserName("小明");
res.setSex("男");
} else {
res.setUserName("小红");
res.setSex("女");
}
// 偶数显示小明,男;奇数显示小红,女
count = (count + 1) % 2;
res.setFlag(true);
// 唤醒线程
res.notify();
}
}
}
}
3.消费者类
/**
* 消费者类
*/
public class Consumer extends Thread {
Res res;
public Consumer(Res res) {
this.res = res;
}
@Override
public void run() {
while (true) {
synchronized (res) {
if (res.getFlag()) {
System.out.println(res.getUserName() + "," + res.getSex());
res.setFlag(false);
res.notify();
}
}
}
}
}
4.测试类
public static void main(String[] args) {
Res res = new Res();
Product product = new Product(res);
Consumer consumer = new Consumer(res);
product.start();
consumer.start();
}
这里需要主要的是锁对象使用的是res。他俩公共的资源。