자바 병렬 프로 그래 밍 의 Exchange 방법 상세 설명

간단 한 소개
exchanger 는 스 레 드 간 데이터 교환 에 사용 되 는 도구 류 로 공공 점 을 제공 합 니 다.이 공공 점 에서 두 스 레 드 는 서로의 데 이 터 를 교환 할 수 있 습 니 다.
하나의 스 레 드 가 exchange 방법 을 호출 한 후에 대기 상태 에 들 어가 다른 스 레 드 가 exchange 방법 을 호출 할 때 까지 쌍방 이 데이터 교환 을 완성 한 후에 계속 실 행 됩 니 다.
exchanger 사용
방법 소개
exchange(V x):다른 스 레 드 가 exchange 방법 을 호출 하거나 현재 스 레 드 가 중 단 될 때 까지 현재 스 레 드 를 막 습 니 다.
x:교환 이 필요 한 대상.
exchange(V x,long timeout,TimeUnit unit):현재 스 레 드 를 막 고 다른 스 레 드 가 exchange 방법 을 호출 하거나 현재 스 레 드 가 중단 되 거나 시간 이 초 과 될 때 까지 기 다 립 니 다.
  • x:교환 이 필요 한 대상.
  • timeout:시간 초과..
  • 시간 초과 단위exchange 방법 은 정상 적 인 상황 에서 교 환 된 대상 을 되 돌려 줍 니 다.현재 스 레 드 가 중단 되 거나 초 과 될 때 exchange 방법 은 null 로 돌아 갑 니 다.
    예 1:A 학우 와 B 학우 가 각자 소장 하고 있 는 블록 버스터 를 교환 하 다
    
    public class Demo {
        public static void main(String[] args) {
            Exchanger<String> stringExchanger = new Exchanger<>();
    
            Thread studentA = new Thread(() -> {
                try {
                    String dataA = "A         ";
                    String dataB = stringExchanger.exchange(dataA);
                    System.out.println("A     " + dataB);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
    
            Thread studentB = new Thread(() -> {
                try {
                    String dataB = "B         ";
                    String dataA = stringExchanger.exchange(dataB);
                    System.out.println("B     " + dataA);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
    
            studentA.start();
            studentB.start();
        }
    }
    
    /*
     *     :
     * B     A         
     * A     B         
     */
    예 2:A 학우 가 바람 을 맞 아 거래 에 실패했다.
    
    public class Demo {
        public static void main(String[] args) {
            Exchanger<String> stringExchanger = new Exchanger<>();
    
            Thread studentA = new Thread(() -> {
                String dataB = null;
                try {
                    String dataA = "A         ";
                    //    5 
                    dataB = stringExchanger.exchange(dataA, 5, TimeUnit.SECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (TimeoutException ex){
                    System.out.println("    -TimeoutException");
                }
    
                System.out.println("A     " + dataB);
            });
    
            studentA.start();
        }
    }
    
    /*
     *     :
     *     -TimeoutException
     * A     null
     */
    자바 병행 프로 그래 밍 의 exchanger 방법 에 대한 상세 한 설명 은 여기까지 입 니 다.더 많은 자바 병행 프로 그래 밍 exchanger 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기