日期:2014-05-20  浏览次数:20670 次

线程问题,新人小白,帮同学问的。
/**假设公司有两个部门,生产部负责生产产品,市场部负责销售产品,库房最多可以积压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);