• 技术文章 >Java >java教程

    Java中消费者问题的代码分析

    不言不言2018-09-11 14:05:41原创765
    本篇文章给大家带来的内容是关于Java中消费者问题的代码分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    1.资源

    public class Resource {
        //当前资源的数量
        int num = 0;
        //当前资源的上限
        int size = 10;
    
        //消费资源
        public synchronized void remove() {
            //如果num为0,没有资源了,需要等待
            while (num == 0) {
                try {
                    System.out.println("消费者进入等待");
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //如果线程可以执行到这里,说明资源里有资源可以消费
            num--;
            System.out.println("消费者线程为:" + Thread.currentThread().getName() + "--资源数量:" + num);
            this.notifyAll();
        }
    
        //生产资源
        public synchronized void put() {
            //如果资源满了,就进入阻塞状态
            while (num == size) {
                try {
                    System.out.println("生产者进入等待");
                    this.wait();
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
            num++;
            System.out.println("生产者线程为:" + Thread.currentThread().getName() + "--资源数量:" + num);
            this.notifyAll();
        }
    }

    2.消费者

    public class Consumer implements Runnable {
    
        private Resource resource;
    
        public Consumer(Resource resource) {
            this.resource = resource;
        }
    
        @Override
        public void run() {
            while (true){
                resource.remove();
            }
    
        }
    }

    3.生产者

    public class Producer implements Runnable {
    
        private Resource resource;
    
        public Producer(Resource resource){
            this.resource=resource;
        }
    
        @Override
        public void run() {
            while (true){
                resource.put();
            }
        }
    }

    4.测试

    public class TestConsumerAndProducer {
    
        public static void main(String[] args) {
            Resource resource = new Resource();
            //生产线程
            Producer p1 = new Producer(resource);
            //消费线程
            Consumer c1 = new Consumer(resource);
    
            new Thread(p1).start();
    
            new Thread(c1).start();
        }
    }

    20180911135448646.png

    相关推荐:

    关于java生产者与消费者的实例详解

    java多线程之并发协作生产者消费者设计模式

    以上就是Java中消费者问题的代码分析的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:生产者 消费者
    上一篇:java中三目运算符和数组方法以及整数比较大小的代码 下一篇:使用Spring Cloud Netflix Zuul代理网关访问后台REST服务的实现(代码)
    大前端线上培训班

    相关文章推荐

    • 理解生产者消费者模型及在Python编程中的运用实例• java多线程之并发协作生产者消费者设计模式• Java 实例 - 生产者/消费者问题• 关于java生产者与消费者的实例详解

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网