好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

java.util.concurrent.Exchanger 可以用来进行数据交换,或者被称为[数据交换器]。两个线程可以使用Exchanger交换数据,下图用来说明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

查看更多关于java并发数据包Exchanger线程间的数据交换器的详细内容...

  阅读:19次