Exchanger in Java
Exchanges is a kind of rendezvous point where two threads can exchange objects. i.e. Exchanger object simply waits until two separate threads calls exchange method on it. Exchanger object exchanges data supplied by threads. Two threads can pair and swap objects between them.
Example implementation
Step 1: Create a Runnable implementation with Exchanger object passed from executor:
————————————————————————————–
import java.util.concurrent.Exchanger;
public class MyExchangeExecutorRunnable implements Runnable {
private Exchanger exchanger;
Object obj;
MyExchangeExecutorRunnable(Exchanger e, Object o) {
this.exchanger = e;
this.obj = o;
}
@Override
public void run() {
Object previous = this.obj;
try {
this.obj = this.exchanger.exchange(this.obj);
System.out.println(Thread.currentThread().getName() + ” exchanged ” + previous + ” for ” + this.obj);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Step 2: Create an Executor class
———————————-
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MyExchangeExecutor {
private static Exchanger ex = new Exchanger();
public static void main(String[] args) {
Map
Map
m1.put(“A”, “a”);
m1.put(“B”, “b”);
m1.put(“C”, “c”);
m1.put(“D”, “d”);
m1.put(“E”, “e”);
ExecutorService eS = Executors.newFixedThreadPool(2);
eS.submit(new MyExchangeExecutorRunnable(ex, m));
eS.submit(new MyExchangeExecutorRunnable(ex, m1));
eS.shutdown();
eS.shutdownNow();
}
}
Output:
——-
pool-1-thread-2 exchanged {A=a, B=b, C=c, D=d, E=e} for {}
pool-1-thread-1 exchanged {} for {A=a, B=b, C=c, D=d, E=e}
0 comments