线程之间交换对象类Exchanger

技术文档网 2021-04-23
Exchanger定义

Exchanger是java.util.concurrent包下的一个类。通过此类可以达到两个线程之间交换对象的目的。Exchanger交换对象图如下:

交互对象通过Exchanger对象的exchange()方法完成。代码如下:

Exchanger<String> exchanger = new Exchanger<>();
ExchangeRunnable exch1 = new ExchangeRunnable(exchanger,"a");
ExchangeRunnable exch2 = new ExchangeRunnable(exchanger,"b");
new Thread(exch1).start();
new Thread(exch2).start();

ExchangeRunnable类代码如下:

public static class ExchangeRunnable implements Runnable{
    Exchanger<String> exchanger = null;
    String val = null;

    public ExchangeRunnable(Exchanger<String> exchanger,String val){
        this.exchanger = exchanger;
        this.val = val;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            String previousStr = this.val;
            this.val = this.exchanger.exchange(this.val);
            System.out.println(Thread.currentThread().getName()+
                    " exchanged " + previousStr + " for " + this.val);

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     }

 }

测试结果如下:

Thread-0 exchanged a for b
Thread-1 exchanged b for a

相关文章

  1. 基于-SLF4J-MDC-机制的日志链路追踪配置属性

    ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC

  2. ajax-跨域访问

    ajax 跨域访问 &lt;!DOCTYPE html&gt; &lt;html xmlns:th="http://www.w3.org/1999/xhtml"&gt; &lt;head&gt;

  3. 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache

    spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port

  4. Java动态代理

    Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public

  5. Java读取classpath中的文件

    public void init() { try { //URL url = Thread.currentThread().getContextClassLo

随机推荐

  1. 基于-SLF4J-MDC-机制的日志链路追踪配置属性

    ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC

  2. ajax-跨域访问

    ajax 跨域访问 &lt;!DOCTYPE html&gt; &lt;html xmlns:th="http://www.w3.org/1999/xhtml"&gt; &lt;head&gt;

  3. 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache

    spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port

  4. Java动态代理

    Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public

  5. Java读取classpath中的文件

    public void init() { try { //URL url = Thread.currentThread().getContextClassLo