A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1 生产消费流程系统,  需要用到线程,、
    生产者和消费者可以是两个独立的并发主体。,共有四个部分

(一) Q 类, 仓库,有两个方法,1 放入仓库方法,不断得把货物放进仓库,2 出库,不断的把货物从仓库搬出,
(二)Producer ,生产类,   不断调用 仓库 进库方法  put();  把货物放进仓库;
  (三) Comsumer  消费类     三个消费线程, 不断调用 仓库 出库方法  get();  把货物拿出来 ;
   (四)   PC类, MAIN 函数,  生成  生产 消费线程,



package com.isoftstone.interview;

public class Q {     //仓库,进货,出货,
        int n;                        //库存量
        private boolean p=false;
                                        //防死锁 判断,用户 阻塞唤醒消费 生产进程
       
       
       
        public synchronized int get(){
                while(!p){    //必须put方法 先调用,把P值 设为ture ,然后 三个消费进程 争夺资源
                        try{
                                wait();
                        }
                        catch(InterruptedException e)
                        {
                                e.printStackTrace();
                        }                               
                                }
                System.out.println(Thread.currentThread().getName()+"Get!"+n);
                p=false;
                notifyAll();
                //notify();   
                return n;
        }
                public synchronized void put(int n)
                {
                        while(p)
                                try{
                                        wait();
                                }
                        catch(InterruptedException e)
                        {
                                System.out.println(e.toString());
                        }
                        this.n=n;
                        System.out.println(Thread.currentThread().getName()+"Put!"+n);
                        p=true;  //值为true ,放入了一次货物 通知消费进场 取货,
                        notifyAll();   
                        //notify();
                }
}


package com.isoftstone.interview;

public class Producer implements Runnable {
                 Q q;
       
        Producer(Q q)
        {
                this.q=q;                                //构造器中生成 线程;
                new Thread(this,"Producer").start();  //need attention
        }
       

                        //覆盖 继承下来的run方法
        public void run(){
                int i=0;
                while(true)                        //生产方法 不断 访问put方法 放货物
                {                                               
                        q.put(i++);                        //生产物品放入仓库,
                }
               
        }
}


package com.isoftstone.interview;

public class Consumer implements Runnable {
       
         Q q;
       
        Consumer(Q q){
                this.q=q;
                new Thread(this,"消费者1_").start();
                new Thread(this,"消费者2_").start();
                new Thread(this,"消费者3_").start();
        }                                //覆盖继承run 方法
        public void run(){
                //因为不止一个用户在 抢占仓库库存 需用互斥  synchronized
                synchronized (q){
                        while(true){
                                q.get();//消费进程不断取货物,消费,
                        }
                }
        }

}




package com.isoftstone.interview;

public class PC {
        public static void main(String []args)
        {
                Q q=new Q();
                Thread thread=Thread.currentThread();
                new Producer(q);
                new Consumer(q);
               
               
                try{
                        thread.sleep(10000);   //线程 等待10秒,让生产线程 先生产一些产品来
                }
                catch(InterruptedException e)
                {
                        e.printStackTrace();
                }
        }
}


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

1 个回复

倒序浏览
哎呀,给力哇, 我可以去申请  面试了,深圳等着我!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马