美文网首页
训练实例——生产与消费问题(线程同步)

训练实例——生产与消费问题(线程同步)

作者: 就这样吧嘞 | 来源:发表于2019-01-27 06:33 被阅读0次

生产与销售同步进行,当仓库满了,生产停止,当仓库空了,停止销售

public class Main {
    public static void main(String[] args) {
        CK ck = new CK ();
        SC sc = new SC (ck);
        XS xs = new XS (ck);
        
        Thread xc1 = new Thread (sc) ;
        Thread xc2 = new Thread (xs) ;
        xc1.start();
        xc2.start();
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CK{ //仓库
    public char[] rongliang = new char[10]; //仓库容量为10
    public int kucun = 0; //仓库库存数量
    
    public synchronized void shengchan(char sp) {                   //生产方法(商品)
        while(kucun==rongliang.length) {   //判断库存满否
            try {
                this.wait();             //库存已满生产活动停止
            }
            catch(Exception e){ 
            }
        }
        this.notify();             //库存不满 生产线程启动
        rongliang [kucun]=sp;        //将商品 装进仓库
        ++kucun;                     //库存增加                 (?是否要++kucun)
        System.out .println("将商品 "+sp+"装进仓库"+"   库存数量为"+kucun);
    }
    
    public synchronized void xiaoshou() {                  //销售方法(商品)
        char sp;
        while(kucun==0) {   //判断库存空否
            try {
                this.wait();             //库存已满销售活动停止
            }
            catch(Exception e){ 
            }
        }
        this.notify();             //库存不空 销售线程启动
        sp=rongliang[kucun-1];
        --kucun;
        System.out .println("将商品 "+sp+"卖出去"+"   库存数量为"+kucun);
    }
}   
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
class SC implements Runnable{ //生产线程
    public CK kc = null ; 
    public SC(CK kc) {
        this.kc=kc;
    }
    public void run() {
        char sp ;                //生产的商品对象是字符sp
        for (int i=0;i<20;i++) {                               //生产总数量为20 
            sp = (char)('A'+i);  //生产的商品是A,B,C,D...
            kc.shengchan(sp);
        }       
    }       
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class XS implements Runnable{ //销售线程
    public CK kc = null ;
    public XS(CK kc) {
        this.kc=kc;
        }
    public void run() {
        for (int i=0;i<20;i++) {
            kc.xiaoshou();
        }
    }   
}

结果:

将商品 A装进仓库   库存数量为1
将商品 B装进仓库   库存数量为2
将商品 C装进仓库   库存数量为3
将商品 D装进仓库   库存数量为4
将商品 E装进仓库   库存数量为5
将商品 F装进仓库   库存数量为6
将商品 G装进仓库   库存数量为7
将商品 H装进仓库   库存数量为8
将商品 I装进仓库   库存数量为9
将商品 J装进仓库   库存数量为10
将商品 J卖出去   库存数量为9
将商品 I卖出去   库存数量为8
将商品 H卖出去   库存数量为7
将商品 G卖出去   库存数量为6
将商品 F卖出去   库存数量为5
将商品 E卖出去   库存数量为4
将商品 D卖出去   库存数量为3
将商品 C卖出去   库存数量为2
将商品 B卖出去   库存数量为1
将商品 A卖出去   库存数量为0
将商品 K装进仓库   库存数量为1
将商品 L装进仓库   库存数量为2
将商品 M装进仓库   库存数量为3
将商品 N装进仓库   库存数量为4
将商品 O装进仓库   库存数量为5
将商品 P装进仓库   库存数量为6
将商品 Q装进仓库   库存数量为7
将商品 R装进仓库   库存数量为8
将商品 S装进仓库   库存数量为9
将商品 T装进仓库   库存数量为10
将商品 T卖出去   库存数量为9
将商品 S卖出去   库存数量为8
将商品 R卖出去   库存数量为7
将商品 Q卖出去   库存数量为6
将商品 P卖出去   库存数量为5
将商品 O卖出去   库存数量为4
将商品 N卖出去   库存数量为3
将商品 M卖出去   库存数量为2
将商品 L卖出去   库存数量为1
将商品 K卖出去   库存数量为0

相关文章

网友评论

      本文标题:训练实例——生产与消费问题(线程同步)

      本文链接:https://www.haomeiwen.com/subject/zcxgjqtx.html