package Demo;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/***
* 生产者消费者问题
* @author 50430
*
*/
public class ProductCoustom {
private static Integer count = 0;
private static final Integer FULL = 10;
private Lock l = new ReentrantLock();
private Condition c1 = l.newCondition();
private Condition c2 = l.newCondition();
public static void main(String[] args) {
ProductCoustom pc = new ProductCoustom();
new Thread(pc.new Producer(),"Producer:" ).start();
new Thread(pc.new Coustom(),"Coustom: " ).start();
}
class Producer implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
try {
//加锁
l.lock();
//等库存满时阻塞
while(count==FULL) {
try {
c1.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
count ++;
System.out.println(Thread.currentThread().getName()+"生产一个产品");
c2.signal();
} finally {
//解锁
l.unlock();
}
}
}
}
class Coustom implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
try {
//加锁
l.lock();
//等库存满时阻塞
while(count==0) {
try {
c2.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
count --;
System.out.println(Thread.currentThread().getName()+"消费一个产品");
c1.signal();
} finally {
//解锁
l.unlock();
}
}
}
}
}
生产者消费者模式多线程笔试题
最新推荐文章于 2022-08-31 19:29:50 发布