服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - java并发数据包Exchanger线程间的数据交换器

java并发数据包Exchanger线程间的数据交换器

2022-09-23 13:58字母 Java教程

这篇文章主要为大家介绍了java并发数据包使用数据交换器Exchanger来进行线程之间的数据交换。有需要的朋友可以借鉴参考下,希望能够有所帮助

java.util.concurrent.Exchanger可以用来进行数据交换,或者被称为“数据交换器”。两个线程可以使用Exchanger交换数据,下图用来说明Exchanger的作用

java并发数据包Exchanger线程间的数据交换器

在下面的代码中

  • 首先我们定义了一个Exchanger,用于数据交换
  • 然后定义了两个线程对象bookExchanger1和bookExchanger2,两个线程都持有Exchanger交换器对象用于数据交换
  • 两个线程中的每个线程都有自己的数据,比如下面代码中的String[] 书籍数组。
?
1
2
3
4
5
6
7
8
9
10
11
12
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数据交换器用于交换图书。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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数据分析》

以上就是java并发数据包Exchanger线程间的数据交换器的详细内容,更多关于java并发Exchanger数据交换的资料请关注服务器之家其它相关文章!

原文链接:https://zimug.blog.csdn.net/article/details/115452091

延伸 · 阅读

精彩推荐