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

网友投稿 292 2022-08-20


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

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

在下面的代码中

首先我们定义了一个Exchanger,用于数据交换然后定义了两个线程对象bookExchanger1和bookExchanger2,两个线程都持有Exchanger交换器对象用于数据交换两个线程中的每个线程都有自己的数据,比如下面代码中的String[] 书籍数组。

public static void main(String[] args) {

//数据交换器-数据为book

Exchanger 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 exchanger = null; //数据交换器

String[] books = null; //图书数组

public BookExchanger(Exchanger 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数据交换的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springboot如何设置过滤器及重复读取request里的body
下一篇:SpringBoot批处理的实现示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~