一 . 概述
该类描述的是一个交换空间,我们可以理解为我们的生产者和消费者模型之中的缓冲区.
二 . 类结构
构造方法:
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就能完成任务.
四 . 理解
我们可以将交换空间理解为生产者和消费者模型之中的缓冲区,利用这个缓冲区的概念我们能够实现线程之间的数据交换,实际上着也是一种同步的方式.
因为当交换空间没有数据的时候,就会阻塞那个获取线程的线程,因此这个也算一个实现线程同步的方式.