/**假设公司有两个部门,生产部负责生产产品,市场部负责销售产品,库房最多可以积压10件产品
* 库房不满时,生产部还可以继续生产,如果库房已经满了,就要等市场部门卖掉一些才可以继续
*生产。请补全以下代码 实现此功能
*true表示有产品,false表示可以放置新产品。
*/
public class ThreadTest {
public static int productId=1;
public static void main(String args[]){
boolean[] buffer=new boolean[10];
Producer p1=new Producer(buffer);
Producer p2=new Producer(buffer);
Consumer c1=new Consumer(buffer);
Consumer c2=new Consumer(buffer);
new Thread(p1).start();
new Thread(p2).start();
new Thread(c1).start();
new Thread(c2).start();
}
}
class Producer implements Runnable{
private boolean[] buffer;
public Producer(boolean[] buffer){
this.buffer=buffer;
}
public void run(){
while(true){
/*补全*/
}
}
}
class Consumer implements Runnable{
private boolean[] buffer;
public Consumer(boolean[] buffer){
this.buffer=buffer;
}
public void run(){
while(true){
/*补全*/
}
}
}
java?线程。。。
------解决方案--------------------
典型的消费者生产者问题,参考代码:
package com.ljn.base;
/**
* @author lijinnan
* @date:2013-11-6 下午4:59:47
*/
/**假设公司有两个部门,生产部负责生产产品,市场部负责销售产品,库房最多可以积压10件产品
* 库房不满时,生产部还可以继续生产,如果库房已经满了,就要等市场部门卖掉一些才可以继续
*生产。请补全以下代码 实现此功能
*true表示有产品,false表示可以放置新产品。
*/
public class ProducerConsumer {
public static final int SIZE = 10;
public static int productId=1;
public static void main(String args[]){
Bar bar = new Bar(SIZE);
Producer p1=new Producer(bar);
Producer p2=new Producer(bar);
Consumer c1=new Consumer(bar);
Consumer c2=new Consumer(bar);
new Thread(p1).start();
new Thread(p2).start();
new Thread(c1).start();
new Thread(c2).start();
}
}
class Bar {
private int maxSize;
private int currentSize;
public Bar (int maxSize) {
this.maxSize = maxSize;
}
public synchronized void produce() {
while (currentSize >= maxSize) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
currentSize++;
System.out.println("produce: currentSize = " + currentSize);
notifyAll();
}
public synchronized void consume() {
while (currentSize <= 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
currentSize--;
System.out.println("consume: currentSize = " + currentSize);