zoukankan      html  css  js  c++  java
  • JAVA JUC 用同步锁解决生产者消费者问题

    JAVA多线程的形式比较独特,用的还是少了...

    class Clerk{
        private int product;
        private ReentrantLock lock = new ReentrantLock();
        private Condition con = lock.newCondition();
    
        public void get(){
            lock.lock();
    
            try {
                if(product<20){
                    product++;
                    System.out.println(Thread.currentThread().getName()+"生产一件商品");
                    con.signalAll();
                }else{
                    System.out.println("仓库已满");
                    try {
                        con.await();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
    
        }
        public void sale(){
            lock.lock();
            try {
                if(product>0){
                    System.out.println(Thread.currentThread().getName()+"消费一件商品");
                    product--;
                    con.signalAll();
                }else{
                    System.out.println(Thread.currentThread().getName()+"没有商品");
                    try {
                        con.await();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                }
            } finally {
                lock.unlock();
            }
        }
    }
    class prductor implements Runnable{
        private Clerk c ;
        prductor(Clerk c){
            this.c=c;
        }
        @Override
        public void run() {
            while (true){
                c.get();
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
        }
    }
    class cus implements Runnable{
        private Clerk c ;
        cus(Clerk c){
            this.c=c;
        }
        @Override
        public void run() {
            while (true){
                c.sale();
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
        }
    }
    public class ProCusProblem{
        public static void main(String[] args) {
            Clerk c = new Clerk();
            prductor p = new prductor(c);
            cus cs = new cus(c);
            new Thread(p,"生产者1").start();
            new Thread(p,"生产者2").start();
            new Thread(p,"生产者3").start();
            new Thread(cs,"消费者1").start();
    
        }
    
    
    }
  • 相关阅读:
    打印水仙花数
    ios9基础知识总结(一)
    简单工厂模式自我理解
    例子
    委托
    IO 磁盘总结
    配置文件命令
    三层架构dal 层基本代码 非查询/查询
    三层架构自我总结
    三层架构源代码
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12469048.html
Copyright © 2011-2022 走看看