Exchanger Introduction
Exchanger is a synchronization point in which threads can pair and exchange objects. Exchanger simplifies data exchange between two threads. Exchanger waits till two threads reach the synchronization point and then exchanges the data provided by the threads.
Java Exchanger Class
Java supports Exchanger synchronization object. Exchanger is a generic class and support the following key APIs.- Exchanger
() - Constructor to create the exchanger. - public V exchange(V x) - Waits for the partner thread to arrive at the exchange point and then swaps the objects
Java Exchanger Example
In this example, we create in the main() program an Exchanger instance for strings. This Exchanger object is then used to exchange strings between the two threads.package com.sourcetricks.exchanger; import java.util.concurrent.Exchanger; public class ExchangerDemo { private static class MyTask1 implements Runnable { Exchanger<String> exchanger; MyTask1(Exchanger<String> exchanger) { this.exchanger = exchanger; } @Override public void run() { String str = null; try { str = exchanger.exchange("Hello from MyTask1"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Received in MyTask1 = " + str); } } private static class MyTask2 implements Runnable { Exchanger<String> exchanger; MyTask2(Exchanger<String> exchanger) { this.exchanger = exchanger; } @Override public void run() { String str = null; try { str = exchanger.exchange("Hello from MyTask2"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Received in MyTask2 = " + str); } } public static void main(String[] args) { Exchanger<String> exchanger = new Exchanger<String>(); Thread t1 = new Thread(new MyTask1(exchanger)); Thread t2 = new Thread(new MyTask2(exchanger)); t1.start(); t2.start(); } }This program produces the following output.
Received in MyTask2 = Hello from MyTask1 Received in MyTask1 = Hello from MyTask2Read other concurrency tutorials from Java Tutorials page.
0 comments:
Post a Comment