学习了解 Exchanger - 实现生产者消费者模型

Posted EvilTuzki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习了解 Exchanger - 实现生产者消费者模型相关的知识,希望对你有一定的参考价值。

例子很简单 Exchanger可以理解为消息队列或者说是一个通信管道,从一边拿到消息,另外一边进行消费。

不过这个是同步实现的,消费者在exchange之前,生产者一直处于等待状态,而不是一直生产。

代码如下:

package exchange;

import java.util.concurrent.Exchanger;

public class ExchangerDemo {

    final static Exchanger<String> exchanger = new Exchanger<>();

    //生产者
    static class Producer extends Thread {

        private Exchanger<String> exchanger;

        public Producer(Exchanger<String> exchanger) {

            this.exchanger = exchanger;
        }

        public void run() {
            for (int i = 1; i <= 100; i++) {
                try {
                    String message = "有价值的消息" + i;
                    System.out.println("生产者准备发送:"  + message);
                    String result = exchanger.exchange(message);
                    System.out.println("生产者收到:"+result);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }
    }


    //消费者
    static class Costomer extends Thread {
        private Exchanger<String> exchanger;

        public Costomer(Exchanger<String> exchanger) {
            this.exchanger = exchanger;
        }

        public void run() {
            //消费者
            int count = 1;
          while (true){
              String message = "消费者收到第"+(count++) + "条消息";
              try {
                  Thread.sleep(100);
                  String exchange = exchanger.exchange(message);
                  System.out.println(message + ",消息内容为:" + exchange);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
        }

    }

    public static void main(String[] args) {
        new Producer(exchanger).start();
        new Costomer(exchanger).start();
    }
}

  

 

以上是关于学习了解 Exchanger - 实现生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章

java并发核心二Exchanger的使用

JUC——线程同步辅助工具类(Exchanger,CompletableFuture)

生产者消费者模式学习

生产者和消费者问题学习以及Java实现

多线程学习-基础生产者消费者模型:wait(),sleep(),notify()实现

Day806.生产者消费者模式 -Java 性能调优实战