zoukankan      html  css  js  c++  java
  • 029 线程辅助类---Exchanger

    一 . 概述

      该类描述的是一个交换空间,我们可以理解为我们的生产者和消费者模型之中的缓冲区.


    二 . 类结构

      构造方法:   

    public Exchanger()

    这个类的构造需要一个泛型,表示需要交换的数据.

    exchange()交换数据.

    当传入null的时候表示从缓冲区中获取数据.


    三 . 例子

    我们模拟一个生产者和消费者的模型

    public class ExchangerTest {
        public static void main(String[] args) throws Exception {
            final Exchanger<Integer> exchange = new Exchanger<Integer>();
            
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for(;;)
                    try {
                        exchange.exchange(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
            
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for(;;)
                    try {
                        System.out.println(exchange.exchange(null));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }

    注意,我们获取数据的时候只需要传入一个null就能完成任务.


    四 . 理解

      我们可以将交换空间理解为生产者和消费者模型之中的缓冲区,利用这个缓冲区的概念我们能够实现线程之间的数据交换,实际上着也是一种同步的方式.

      因为当交换空间没有数据的时候,就会阻塞那个获取线程的线程,因此这个也算一个实现线程同步的方式.

  • 相关阅读:
    Vue中过度动画效果应用
    最小公倍数和最大公约数求解方法
    Vue实现双向绑定的原理以及响应式数据
    Hive SQL语法总结
    java安装配置
    Ubuntu vmware补丁
    centos6 安装tensorflow
    python hive
    python 连接 hive
    ubuntu下python通过cx_Oracle库访问oracle数据库
  • 原文地址:https://www.cnblogs.com/trekxu/p/9011355.html
Copyright © 2011-2022 走看看