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就能完成任务.


    四 . 理解

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

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

  • 相关阅读:
    1058
    light oj 1067 费马小定理求逆元
    HDU 1022
    贪心
    HDU 4994 博弈。
    HDU 5234 背包。
    CodeForces 327B 水题。
    vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用
    Object.assign的用法
    react + antd 实现打印功能(踩了不少坑)
  • 原文地址:https://www.cnblogs.com/trekxu/p/9011355.html
Copyright © 2011-2022 走看看