import java.util.Random;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;java
public class Demo05_Goods {
private Object[] goods = new Object[1]; // 1:声明产品库
private static Lock lock = new ReentrantLock();
private static Condition con = lock.newCondition();dom
// 2:开发一个方法用于向goods里面产产品,用一个线程不断的调用这个方法
public void make() {
lock.lock();
while (goods[0] != null) {
try {
con.await();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
int a = new Random().nextInt(100);// 0~99之间的任意值
goods[0] = a;
System.err.println("生产一个产品:" + goods[0]);
// 生产完成之后,就去通知购买人能够购买了
con.signal();
}
ide
// 3:开发一个方法不断的去购买
public void buy() {
lock.lock();
// 判断若是没有没有产品,就去等
while (goods[0] == null) {
try {
con.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Object obj = goods[0];
goods[0] = null;
System.err.println("---------------------------购买到一个产品:" + obj);
con.signal();
}
线程
Thread maker = new Thread() {
@Override
public void run() {
while (true) {
make();
try {
Thread.sleep(100 * new Random().nextInt(4));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};code
Thread buyer = new Thread() {
public void run() {
while (true) {
buy();
try {
Thread.sleep(100 * new Random().nextInt(4));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
};开发
public Demo05_Goods() {
maker.start();
buyer.start();
}产品
public static void main(String[] args) {
new Demo05_Goods();
}it
}
io