Exchanger-브로맨스 스레드 정보 교환

2016 단어 Exchanger
만약에 두 개의 스레드가 운행 과정에서 서로의 정보를 교환해야 한다. 예를 들어 데이터나 사용하는 공간이 필요하다면 Exchanger와 같은 종류를 사용해야 한다. Exchanger는 스레드 교환 정보에 매우 편리한 경로를 제공한다. 이것은 두 개의 스레드 교환 대상의 동기화점으로 사용할 수 있다. 모든 스레드가 exchange () 방법에 들어가 대상을 제시할 때만 다른 스레드가 되돌아올 때 주는 대상을 받아들일 수 있다.
     
Exchanger는 다음과 같이 구성됩니다.
[java]
Exchanger();//새 Exchanger를 만듭니다.
Exchanger가 사용하는 주요 방법은 다음과 같습니다.
[java]
exchange(V x);//다른 라인이 이 교환점에 도착하기를 기다리고 (중단되지 않는 한) 주어진 대상을 이 라인에 전송하고 이 라인의 대상을 수신합니다.
exchange(V x, long timeout, TimeUnit unit);//다른 라인이 이 교환점에 도착하기를 기다린 후 (중단되거나 지정된 대기 시간을 초과하지 않는 한) 주어진 대상을 이 라인에 전송하고 이 라인의 대상을 수신합니다.

  public static void main(String args[]) throws InterruptedException
  {
    Thread thread1 = new Thread("thread1")
    {
      @Override
      public void run()
      {
        try {
          String tStr = "AA";
          String reslut = exgr.exchange(tStr);
          out.println(Thread.currentThread().getName() + "; :" + tStr + "  =====" + reslut);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    };

    Thread thread2 = new Thread("thread2")
    {
      @Override
      public void run()
      {
        try {
          String tStr = "BB";
          String result = exgr.exchange(tStr);
          out.println(Thread.currentThread().getName() + "; :" + tStr + "  =====" + result);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    };
    thread1.start();
    thread2.start();
  }

실행 결과:
thread1;스왑 전 데이터: AA 스왑 후 데이터 =====BB
thread2;스왑 전 데이터: BB 스왑 후 데이터 ======AA
ps: 두 개의 스레드와의 데이터 교환만 적용됩니다. 만약에 >2개의 스레드가 있다면 반드시 짝수 스레드여야 하며 자체적으로 데이터를 교환할 수 있습니다(스레드의 정확성을 보장할 수 없습니다).홀수라면 마지막 라인이 남아서 교환 라인이 없고 멈추지 않습니다.

좋은 웹페이지 즐겨찾기