Skip to content

Latest commit

 

History

History
64 lines (53 loc) · 1.52 KB

File metadata and controls

64 lines (53 loc) · 1.52 KB

Exchanger

  • 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();
    }
}