java并发数据包Exchanger线程间的数据交换器
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数据分析》
以上就是java并发数据包Exchanger线程间的数据交换器的详细内容,更多关于java并发Exchanger数据交换的资料请关注脚本之家其它相关文章!
相关文章
JDK1.7 之java.nio.file.Files 读取文件仅需一行代码实现
下面小编就为大家分享一篇JDK1.7 之java.nio.file.Files 读取文件仅需一行代码实现,具有很好的参考价值,希望对大家有所帮助2017-11-11Java8新特性之泛型的目标类型推断_动力节点Java学院整理
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。下面通过本文给分享Java8新特性之泛型的目标类型推断,感兴趣的朋友参考下吧2017-06-06Springboot+mybatis plus找不到mapper.xml的问题解决
本文主要介绍了Springboot+mybatis plus找不到mapper.xml的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-05-05
最新评论