关于spring:java并发编程JUC第十一篇如何在线程之间进行对等数据交换

43次阅读

共计 1545 个字符,预计需要花费 4 分钟才能阅读完成。

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

在上面的代码中

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

    public static void main(String[] args) {
    // 数据交换器 - 数据为 book
    Exchanger<String> exchanger = new Exchanger<>();
    // 换书线程 1
    BookExchanger bookExchanger1
            = new BookExchanger(exchanger, new String[]{"Java 从入门到放弃","Java 编程思维"});
    // 换书线程 2
    BookExchanger 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 深入浅出系列》

正文完
 0