@SuppressWarnings({"unchecked"})
public V exchange (V x) throws InterruptedException

Waits for another thread to arrive at this exchange point (unless the current thread is interrupted), and then transfers the given object to it, receiving its object in return.

If another thread is already waiting at the exchange point then it is resumed for thread scheduling purposes and receives the object passed in by the current thread. The current thread returns immediately, receiving the object passed to the exchange by that other thread.

If no other thread is already waiting at the exchange then the current thread is disabled for thread scheduling purposes and lies dormant until one of two things happens:

If the current thread:

then InterruptedException is thrown and the current thread's interrupted status is cleared.

Parameters:
x    the object to exchange

Returns:  the object provided by the other thread

Exceptions:
InterruptedException    if the current thread was interrupted while waiting