学习多线程之Exchanger使用

简介: 学习多线程之Exchanger使用

写在前面


今天我们来学习多线程的一个知识,那就是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方法,来传递了一个已经收到的信息。

并且这两个线程在接受到对方的消息后,分别也打印了接收到的消息。

由此可见,我们的结果是正确的,大家也可以自行去试一下,体验一下这个工具的使用。


相关文章
|
6月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
|
6月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
6月前
|
C#
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
120 0
|
6月前
|
C#
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
184 0
|
2月前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
147 6
【Java学习】多线程&JUC万字超详解
|
5月前
|
NoSQL Redis
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
128 0
|
5月前
|
调度 Python
Python多线程学习优质方法分享
Python多线程学习优质方法分享
26 0
|
5月前
|
安全 API C++
逆向学习Windows篇:C++中多线程的使用和回调函数的实现
逆向学习Windows篇:C++中多线程的使用和回调函数的实现
191 0
|
6月前
|
Java 调度
【JAVA学习之路 | 提高篇】进程与线程(Thread)
【JAVA学习之路 | 提高篇】进程与线程(Thread)
|
6月前
|
安全 Java
java-多线程学习记录
java-多线程学习记录