线程问题,新人小白,帮同学问的。

熊猫大侠 2013-11-06 04:46:11
/**假设公司有两个部门,生产部负责生产产品,市场部负责销售产品,库房最多可以积压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){
/*补全*/

}
}
}
...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊猫大侠 2013-11-06
  • 打赏
  • 举报
回复
谢谢!非常感谢。。。
bylijinnan 2013-11-06
  • 打赏
  • 举报
回复
典型的消费者生产者问题,参考代码:
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);
        notifyAll();
    }
    
}


class Producer implements Runnable{
    private Bar bar;
    public Producer(Bar bar){
        this.bar=bar;
    }
    public void run(){
        while(true){
            bar.produce();
        }   
    }
}
class Consumer implements Runnable{
    private Bar bar;
    public Consumer(Bar bar){
        this.bar = bar;
    }
    public void run(){
        while(true){
            bar.consume();
        }
    }
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧