Java并发编程核心方法与框架-exchanger的使用

Exchanger可以使两个线程之间传输数据,比生产者/消费者模式使用wait/notify更加方便。

Exchanger中的exchange()方法具有阻塞的特点,此方法被调用后等待其他线程来取数据,如果没有其他线程取得数据,则一直阻塞等待。

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线程获得的值:" + exchanger.exchange("String from threadA"));
			System.out.println("threadA end");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

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线程获得的值:" + exchanger.exchange("String from threadB"));
			System.out.println("threadB end");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

public class Main {
	public static void main(String[] args) {
		Exchanger<String> exchanger = new Exchanger<>();
		ThreadA a = new ThreadA(exchanger);
		a.setName("A");
		ThreadB b = new ThreadB(exchanger);
		b.setName("B");
		a.start();
		b.start();
		System.out.println("main end");
	}
}

运行程序,控制台打印结果如下:

main end
A线程获得的值:String from threadB
threadA end
B线程获得的值:String from threadA
threadB end
原文地址:https://www.cnblogs.com/umgsai/p/5671634.html