- Used to exchange data between two threads.
- waits until two separate threads call its
exchange() method.
import java.util.concurrent.Exchanger;
class Task1 implements Runnable{
Integer a = 0;
Exchanger<Integer> exchanger;
Task1(Exchanger<Integer> exchanger){
this.exchanger = exchanger;
}
public void run(){
String name = Thread.currentThread().getName();
for(int i=0;i<3;i++){
try {
int res = this.exchanger.exchange(a + i);
System.out.println(name + " got " + res);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
class Task2 implements Runnable {
Integer b = 4;
Exchanger<Integer> exchanger;
Task2(Exchanger<Integer> exchanger){
this.exchanger = exchanger;
}
/**
* Runs this operation.
*/
@Override
public void run() {
for(int i=0;i<3;i++){
String name = Thread.currentThread().getName();
try {
int res = this.exchanger.exchange(b + i);
System.out.println(name + " got " + res);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
public class Main {
public static void main(String[] args) {
Exchanger<Integer> cb = new Exchanger<>();
new Thread(new Task1(cb),"thread1").start();
new Thread(new Task2(cb),"thread2").start();
}
}