生产者没生产一台电脑,消费者就取走一台电脑。若没有电脑,消费者等待,并通知生产者生产电脑。若生产了一台电脑,生产者等待,并通知消费者取走电脑。
代码:
package threadprosss.practice3;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Test {
public static void main(String[] args) {
ComputerFactory factory = new ComputerFactory();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i <10 ; i++) {
factory.productCom();
}
}
}, "生产者").start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i <10 ; i++) {
factory.moveCom();
}
}
}, "消费者").start();
}
}
class ComputerFactory{
private Lock lock=new ReentrantLock();
private Condition con1=lock.newCondition();
private Condition con2=lock.newCondition();
private int index=0;
public void productCom(){
try{
lock.lock();
while(index==1){
try {
con1.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
index++;
System.out.println(Thread.currentThread().getName()+"生产电脑");
con2.signal();
}finally {
lock.unlock();
}
}
public void moveCom(){
try{
lock.lock();
while(index==0){
try {
con2.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
index--;
System.out.println(Thread.currentThread().getName()+"拿走电脑");
con1.signal();
}finally {
lock.unlock();
}
}
}
结果: