Java 동시 프로그래밍 - Exchange

1. 소개


Exchange는 java.util.concurrent 패키지 아래에 위치하고 주로 라인 간의 데이터 교환에 사용되는 도구류로 파이프 설계와 유전 알고리즘에 자주 사용된다.Exchange는 동기화 지점을 제공합니다. 이 동기화 지점에서 라인이 짝을 이루고 데이터 교환을 진행합니다.첫 번째 라인이 exchange () 방법을 호출할 때 대상을 전송합니다. 두 번째 대상이 exchange () 방법을 호출할 때까지 기다립니다. 모든 라인의 exchange () 방법은 일치하는 라인이 exchange () 방법에 전송된 대상을 되돌려받고 데이터 교환을 완성합니다.Exchange는 양방향 데이터 전송의 SynchronousQueue로 간주할 수 있습니다.

2. 소개


2.1 구조 방법
——public Exchange(){}
  • 새로운 Exchange 생성

  • 2.2 주요 방법
    ——public V exchange(V x) throws InterruptedException{}
  • 다른 라인이 이 교환점에 도착하기를 기다리며 (현재 라인이 중단되지 않는 한) 주어진 대상 x를 이 라인에 전송하고 이 라인의 대상을 수신합니다.

  • ——public V exchange(V x) throws InterruptedException{}
  • 다른 라인이 이 교환점에 도착하기를 기다린다(현재 라인이 중단되거나 지정된 대기 시간을 초과하지 않는 한) 지정한 대상 x를 이 라인에 전송하고 이 라인의 대상을 수신한다.

  • 3. 사례


    고정 스레드 탱크를 만드는 수량은 2이고, 두 스레드는 문자열 데이터를 교환하는 것을 예로 들며, 그 중 한 스레드 실행 방법인 exchange () 방법이 있을 때, 두 번째 스레드가 exchange () 방법을 실행하고, 두 스레드가 데이터의 교환을 완성할 때까지 기다린다.만약 두 라인에 exchange () 방법을 실행하지 않았다면, 계속 기다릴 것입니다.
    public class ExChangeDemo {
      private static ExecutorService exec = Executors.newFixedThreadPool(2);
      // Exchange
      private static Exchanger<String> change = new Exchanger<>();
      public static void main(String[] args) {
        exec.execute(new Runnable() {
          public void run() {
            String A="change data--1";
            try {
              String B = change.exchange(A);
              System.out.println("Current Thread:"+Thread.currentThread().getName()+",After change:"+B);
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
          }
        });
        exec.execute(new Runnable() {
          public void run() {
            String B="change data--2";
            try {
              String A=change.exchange(B);
              System.out.println("Current Thread:"+Thread.currentThread().getName()+",After change:"+A);
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
          }
        });
        exec.shutdown();
      }
    }
    

    실행 결과: Current Thread:pool-1-thread-2,After change:change data--1Current Thread:pool-1-thread-1,After change:change data--2

    좋은 웹페이지 즐겨찾기