【天啊!!!搞事情】--竟然有比wait/notify更加方便的---Exchanger类

前言:学习受教了,二话不说,贴上干货,走起来----【在2个线程之间传递任意数据类型的数据】

package com.zcw.demo3;

import java.util.concurrent.Exchanger;

/**
 * @ClassName : ThreadA
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-04-14 17:17
 */
public class ThreadA extends Thread {
    private Exchanger<String> exchanger;
    public ThreadA(Exchanger<String> exchanger){
        super();
        this.exchanger = exchanger;
    }
    @Override
    public void run(){
        try{
            System.out.println("在线程A中得到线程B的值==="+exchanger.exchange("AAAAAAA"));
        }catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
package com.zcw.demo3;

import java.util.concurrent.Exchanger;

/**
 * @ClassName : ThreadB
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-04-14 17:19
 */
public class ThreadB extends Thread {
    private Exchanger<String> exchanger;
    public ThreadB(Exchanger<String> exchanger){
        super();
        this.exchanger = exchanger;
    }
    @Override
    public void run(){
        try {
            System.out.println("在线程B中得到线程A的值====="+exchanger.exchange("BBBBBBBBBBBBB"));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
package com.zcw.demo3;

import java.util.concurrent.Exchanger;

/**
 * @ClassName : Run
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-04-14 17:21
 */
public class Run {
    public static void main(String[] args) {
        Exchanger<String> exchanger = new Exchanger<String>();
        ThreadA a = new ThreadA(exchanger);
        ThreadB b = new ThreadB(exchanger);
        a.start();
        b.start();
    }
}

运行结果:
在这里插入图片描述

发布了475 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_32370913/article/details/105577090