두 스레드로 데이터를 교환하는 Exchanger

1541 단어
Exchanger(교환자)는 스레드 간 협업에 사용되는 도구 클래스입니다.Exchanger는 스레드 간의 데이터 교환에 사용됩니다.그것은 동기점을 제공하는데, 이 동기점 두 라인에서 서로의 데이터를 교환할 수 있다.이 두 라인은 exchange 방법을 통해 데이터를 교환합니다. 만약에 첫 번째 라인이 exchange 방법을 먼저 실행한다면 두 번째 라인도 exchange를 실행하기를 기다릴 것입니다. 두 라인이 모두 동기점에 도달할 때 이 두 라인은 데이터를 교환하여 본 라인이 생산한 데이터를 상대방에게 전달할 수 있습니다.
public class ExchangerDemo {
    
    public static void main(String[] args) {
        ExecutorService executor = Executors.newCachedThreadPool();
        
        final Exchanger exchanger = new Exchanger();
        executor.execute(new Runnable() {
            String data1 = " ";
            
 
            @Override
            public void run() {
                nbaTrade(data1, exchanger);
            }
        });
        
 
        executor.execute(new Runnable() {
            String data1 = " ";
 
            @Override
            public void run() {
               
                nbaTrade(data1, exchanger);
            }
        });
        

        executor.shutdown();
    }
 
    private static void nbaTrade(String data1, Exchanger exchanger) {
        try {
            System.out.println(Thread.currentThread().getName() + "  " + data1 + "  ");
            String data2 = (String) exchanger.exchange(data1);
            System.out.println(Thread.currentThread().getName() + " " + data2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
pool-1-thread-1     
pool-1-thread-2     
pool-1-thread-2 
pool-1-thread-1 

좋은 웹페이지 즐겨찾기