java.util.concurrent.Exchanger能够用来进行数据交换,或者被称为“数据交换器”。两个线程能够应用Exchanger替换数据,下图用来阐明Exchanger的作用

在上面的代码中

  • 首先咱们定义了一个Exchanger,用于数据交换
  • 而后定义了两个线程对象bookExchanger1和bookExchanger2,两个线程都持有Exchanger交换器对象用于数据交换
  • 两个线程中的每个线程都有本人的数据,比方上面代码中的String[] 书籍数组。

    public static void main(String[] args) {//数据交换器-数据为bookExchanger<String> exchanger = new Exchanger<>();//换书线程1BookExchanger bookExchanger1        = new BookExchanger(exchanger, new String[]{"Java从入门到放弃","Java编程思维"});//换书线程2BookExchanger bookExchanger2        = new BookExchanger(exchanger, new String[]{"C语言程序设计","实战Python数据分析"});new Thread(bookExchanger1).start();new Thread(bookExchanger2).start();}

BookExchanger 继承自Runnable代表参加换书的换书读者,他持有Exchanger数据交换器用于替换图书。

public class BookExchanger implements Runnable{    Exchanger<String> exchanger = null;  //数据交换器    String[]  books    = null;   //图书数组    public BookExchanger(Exchanger<String> exchanger, String[] books) {        this.exchanger = exchanger;        this.books = books;    }    @Override    public void run() {        try {            for(String bookName : books) {                //替换数据,bookName为我的书,exBook为我换回来的书                String exBook = this.exchanger.exchange(bookName);                System.out.println(                        Thread.currentThread().getName() +                                " 用《 " + bookName + "》 换 《 " + exBook + "》"                );            }        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

执行上文中的代码,失去如下的打印输出。能够看到只有两个线程实现一次替换之后,能力再进行下一次的替换。

Thread-1 用《 C语言程序设计》 换 《 Java从入门到放弃》Thread-0 用《 Java从入门到放弃》 换 《 C语言程序设计》Thread-1 用《 实战Python数据分析》 换 《 Java编程思维》Thread-0 用《 Java编程思维》 换 《 实战Python数据分析》

欢送关注我的博客,外面有很多精品合集

本文转载注明出处(必须带连贯,不能只转文字):字母哥博客 - zimug.com

感觉对您有帮忙的话,帮我点赞、分享!您的反对是我不竭的创作能源! 。另外,笔者最近一段时间输入了如下的精品内容,期待您的关注。

  • 《手摸手教你学Spring Boot2.0》
  • 《Spring Security-JWT-OAuth2一本通》
  • 《实战前后端拆散RBAC权限管理系统》
  • 《实战SpringCloud微服务从青铜到王者》
  • 《VUE深入浅出系列》