Monday, May 19, 2025
HomeJavaLearn how to use Exchanger for Inter thread communication in Java? Instance...

Learn how to use Exchanger for Inter thread communication in Java? Instance Tutorial


Hiya guys, if you’re working in a concurrent Java software then you definitely might need heard in regards to the Exchanger class of java.util.concurrent package deal. The Exchanger in Java is one other concurrency or synchronization utility launched in Java 1.5 together with CountDownLatch, CyclicBarrier, and Semaphores. Because the identify suggests, the Exchanger permits two Threads to satisfy and change information on the rendezvous or assembly level. This implies you should utilize Exchanger to share objects between threads and for inter-thread communication. The java.util.Exchanger is a parametric class, which defines and holds the kind of object to be exchanged. It has an overloaded methodology known as the change(), which is used to change objects between threads.

This can be a blocking methodology, which suggests the Thread, which calls the change() methodology wait on the change level till one other Thread arrives. As soon as one other thread arrives, each change objects and return from this methodology. An overloaded model of the change methodology accepts a further
TimeUnit object and wait till day out.

By the best way, you may as well interrupt a Thread ready on the change level for different contributors. In contrast to CountDownLatch, CyclicBarrier, or Semaphore, the Exchanger utility can solely synchronize two threads, which makes it excellent for fixing the classical producer-consumer drawback.

On this Java Concurrency tutorial, you’ll discover ways to use Exchanger in Java by implementing a producer-consumer design sample utilizing Exchanger. Btw, I’m assuming that you’re acquainted with Java programming syntax and semantics, if you’re a whole newbie to Java then it’s possible you’ll discover it obscure this instance.

In that case, I recommend you first undergo a complete Java course like The Full Java Masterclass by Tim Buchalaka on Udemy.  It is can also be very inexpensive and you should buy in simply $10 on Udemy gross sales which occur every so often.

Java Exchanger Instance for Inter thread communication

The Exchanger class is somewhat a easy synchronization utility to grasp and use. Within the final couple of concurrency tutorials, we now have solved producer shoppers utilizing wait and notify (see right here) and likewise applied producer-consumer utilizing BlockingQueue, now it is time to use Exchanger to implement the identical.

On this Java concurrency tutorial, we shall be creating one producer and one client thread, which can change the buffer utilizing the Exchanger utility class.

On the whole, right here is how Exchanger works :

1. You first create an Change object like Exchanger<Deque<Lengthy>> stringExchanger = new Exchanger<>(); this defines what kind of object shall be exchanged between threads. On this case, two threads will change the Deque object, containing lengthy values.

2. When Thread A is able to change its buffer or object, it calls the Exchanger.change() methodology. This can be a blocking methodology, and Thread A shall be blocked till Thread B comes and switch its objects to Thread A or Thread A is interrupted or timeout.

3. When Thread B is prepared, it additionally calls the change() methodology. Now each Thread A and B change one another’s object and return from the change methodology.

4. As soon as the change completes, Thread A has Thread B’s object and vice-versa.

On the identical be aware, I wish to emphasize the significance of Java concurrency abilities and urge each Java developer to spend a while mastering Java concurrent courses. When you agree with me and wish a useful resource to degree up your Java Concurrency abilities then I extremely suggest you undergo the traditional Java Concurrency in Apply e book and Multithreading and Parallel Computing in Java course on Udemy, each are superior sources.

Java Program with Exchanger in Concurrency

Right here is our full Java program to show use Exchanger utility class from Java Concurrency API. You may copy paste this program in your favourite IDE like IntelliJIDEA or Eclipse and run this program. 

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.concurrent.Exchanger;
 
/**
   * Exchanger Instance in Java. Exchanger permits two Threads to satisfy at change
   * level and change information construction or objects. On this Java program, exchanger
   * is used to change buffer between producer and client.
 
  * @creator Javin Paul
 
  */
 
public class JavaExchangerTutorail {
  
 
    public static void primary(String args[]) throws InterruptedException {
 
 
        //Creating Exchanger to change String object with different thread
         remaining Exchanger&gt; exchanger = new Exchanger&gt;();
  
        Thread producer = new Thread("Producer : "){
 
            @Override
             public void run(){
 
                Deque stack = new ArrayDeque();
 
                //producer thread insert elments into stack 
                whereas (stack.isEmpty()) {
 
                    stack.add(System.nanoTime()%1000);  
                    //if stack shouldn't be empty then change it to client thread
 
                    strive {
 
                        System.out.println(Thread.currentThread().getName() 
                                 + " able to change : " + stack);
                        // Exchanger return different Thread's object
                        stack = exchanger.change(stack); 
                        System.out.println(Thread.currentThread().getName() 
                                 + " acquired : " + stack);
 
                    } catch (InterruptedException ie) { ie.printStackTrace(); }
 
                }
 
            }
 
        };
 
 
 
        Thread client = new Thread("Client : "){
 
            @Override
 
            public void run(){
 
                Deque stack = new ArrayDeque();
  
                //client thread takes object from stack and prints
 
                do{
                     //if stack is empty then change it to producer for refill
                     strive {
 
                        System.out.println(Thread.currentThread().getName() 
                                 + " able to change : " + stack); 
                        stack = exchanger.change(stack); 
                        System.out.println(Thread.currentThread().getName() 
                                 + " acquired : " + stack); 
                        stack.take away();
 
                    } catch (InterruptedException ie) { ie.printStackTrace(); }
 
                }whereas(stack.isEmpty()) ;       
   
            }
 
        };
   
        producer.begin(); 
        
        //sleeping earlier than beginning client to present producer time to supply
        Thread.sleep(1000); 
        client.begin();
 
 
 
    }
 
 
 
}
 
 
 
Output:
 
Producer :  able to change : [247]
 
Client :  able to change : []
 
Producer :  acquired : []
 
Client :  acquired : [247]
 
Producer :  able to change : [692]
 
Client :  able to change : []
 
Client :  acquired : [692]
 
Client :  able to change : []
 
Producer :  acquired : []

How does Change Work? How does it move objects?

When you have a look at the above instance, all code is contained in the primary methodology. We've made the Exchanger occasion remaining as a result of we're accessing them from the Nameless internal class, and solely remaining native variables are accessible from the nameless internal class.

Later, we created two threads, Producer and Client. The producer checks the queue and if it is empty, it provides the final three digits of present Nano time and calls the change() methodology.

Now, till the Client thread arrives on the change level, I imply till it calls the change() methodology, the Producer thread shall be blocked.

As soon as a client arrives, each change one another's stack and return from the change() methodology. At the moment, the Producer has an empty stack of shoppers and the patron has a non-empty stack of Producer, I imply, they've one another's object.

For understanding, which thread is exchanging which stack, we print the content material of the stack earlier than and after an change on every thread. When you have a look at the output, it is self-explanatory.

By the best way, as with threads, you aren't assured to get the output in the identical order. Within the third iteration, you'll be able to see the patron has an emptied stack and able to change the empty stack even earlier than the producer thread will get scheduled and return from the change methodology.

That is all on Learn how to use Exchanger class in Java. The Exchanger class is a pleasant and easy synchronization utility and excellent for coordinating two threads.  You may simply share objects between two threads utilizing Exchanger in Java. Exchanger can be used to implement a producer-consumer sample with one producer and one client. When you wish to study extra about Java concurrency courses I recommend you take a look at the next sources:


Different Java Concurrency Articles it's possible you'll like

  • The Java Developer RoadMap (roadmap)
  • What's happens-before in Java Concurrency? (reply)
  • 10 Java Multithreading and Concurrency Greatest Practices (article)
  • Prime 50 Multithreading and Concurrency Questions in Java (questions)
  • Prime 5 Books to Grasp Concurrency in Java (books)
  • 10 Free Java Programs for Newbies and Intermediate builders (programs)
  • Learn how to keep away from impasse in Java? (reply)
  • Understanding the circulate of knowledge and code in Java program (reply)
  • Is Java Concurrency in Apply nonetheless legitimate (reply)
  • Distinction between CyclicBarrier and CountDownLatch in Java? (reply)
  • How Occurs Earlier than works in Java?  (reply)
  • 10 Tricks to turn out to be a greater Java Developer (ideas)
  • Learn how to do inter-thread communication in Java utilizing wait-notify? (reply)
  • Prime 5 Programs to Be taught Java Multithreading in-depth (programs)

Thanks for studying this text thus far. When you like this Java Concurrency tutorial then please share it with your pals and colleagues. You probably have any questions or suggestions, then please drop a
be aware.

P. S. - If you're new to the Java world and wish to study core ideas together with Concurrency however on the lookout for some free programs to start out with then you may as well take a look at this free Java Multithreading course on Udemy. It's a good free course to study  Java Concurrency as nicely.



RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments