写在前面
今天我们来学习多线程的一个知识,那就是Exchanger工具类,一个在多线程可以做到信息交换的工具,下面我们就一起来看一下具体是如何使用的吧。
学习多线程之Exchanger使用
Exchanger是一个转换器,重要是将多个线程之间的数据进行一个交换,并且可以根据这个信息来对自身线程进行一个操作。
当然了,如果其中一方没有进行的交换的时候,当前的线程就必须一直处于等待的过程中,直到另一个线程进行了交换,方可继续向下运行。
我们还是从代码示例中理解这个工具的使用方法,来看一下如下代码:
public static void main(String[] args) { Exchanger exchanger = new Exchanger(); Thread thread0 = new Thread(new Runnable() { @SneakyThrows @Override public void run() { System.out.println("thread0运行中"+System.currentTimeMillis()); String msg = (String) exchanger.exchange("thread0前来报到"); System.out.println("thread0收到的消息"+msg); } }); Thread thread1 = new Thread(new Runnable() { @SneakyThrows @Override public void run() { System.out.println("thread1运行中"+System.currentTimeMillis()); String msg = (String) exchanger.exchange("thread1收到"); System.out.println("thread1收到的消息"+msg); } }); thread0.start(); thread1.start(); }
运行上述代码,我们可以得到如下结果:
thread0运行中1645942968676
thread1运行中1645942968676
thread1收到的消息thread0前来报到
thread0收到的消息thread1收到
从结果上面来看,我们得到了预期的效果,大概来解释一下这段代码的含义吧。
首先声明了Exchanger对象,还有两个线程。
第一个线程向另一个线程发送一个消息,这个消息就是thread0前来报到,这个时候就需要线程thread1来进行数据的交换了。
所以在thread1线程中运行时,也同样使用了exchange方法,来传递了一个已经收到的信息。
并且这两个线程在接受到对方的消息后,分别也打印了接收到的消息。
由此可见,我们的结果是正确的,大家也可以自行去试一下,体验一下这个工具的使用。