Share via


CyclicBarrier 클래스

정의

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

[Android.Runtime.Register("java/util/concurrent/CyclicBarrier", DoNotGenerateAcw=true)]
public class CyclicBarrier : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/CyclicBarrier", DoNotGenerateAcw=true)>]
type CyclicBarrier = class
    inherit Object
상속
CyclicBarrier
특성

설명

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다. CyclicBarriers는 때때로 서로를 기다려야 하는 스레드의 고정 크기 파티와 관련된 프로그램에 유용합니다. 대기 스레드가 해제된 후 다시 사용할 수 있으므로 장벽을 emcyclic<>/em>이라고 <합니다.

CyclicBarrier 파티의 마지막 스레드가 도착한 후 스레드가 해제되기 전에 장벽 지점당 한 번 실행되는 선택적 Runnable 명령을 지원합니다. 이 <em>장벽 작업</em> 은 당사자가 계속하기 전에 공유 상태를 업데이트하는 데 유용합니다.

<b>샘플 사용:</b> 병렬 분해 디자인에서 장벽을 사용하는 예는 다음과 같습니다.

{@code
            class Solver {
              final int N;
              final float[][] data;
              final CyclicBarrier barrier;

              class Worker implements Runnable {
                int myRow;
                Worker(int row) { myRow = row; }
                public void run() {
                  while (!done()) {
                    processRow(myRow);

                    try {
                      barrier.await();
                    } catch (InterruptedException ex) {
                      return;
                    } catch (BrokenBarrierException ex) {
                      return;
                    }
                  }
                }
              }

              public Solver(float[][] matrix) {
                data = matrix;
                N = matrix.length;
                Runnable barrierAction = () -> mergeRows(...);
                barrier = new CyclicBarrier(N, barrierAction);

                List<Thread> threads = new ArrayList<>(N);
                for (int i = 0; i < N; i++) {
                  Thread thread = new Thread(new Worker(i));
                  threads.add(thread);
                  thread.start();
                }

                // wait until done
                for (Thread thread : threads)
                  try {
                    thread.join();
                  } catch (InterruptedException ex) { }
              }
            }}

여기서 각 작업자 스레드는 행렬의 행을 처리한 다음 모든 행이 처리될 때까지 장벽에서 대기합니다. 모든 행이 처리되면 제공 Runnable 된 장벽 작업이 실행되고 행이 병합됩니다. 합병에서 솔루션이 발견 done() 되었다고 판단되면 반환 true 되고 각 작업자가 종료됩니다.

장벽 작업이 실행될 때 일시 중단되는 당사자에 의존하지 않는 경우 파티의 스레드가 해제될 때 해당 작업을 실행할 수 있습니다. 이를 용이하게 하기 위해 의 #await 각 호출은 장벽에 있는 해당 스레드의 도착 인덱스(arrival index)를 반환합니다. 그런 다음, 장벽 작업을 실행해야 하는 스레드를 선택할 수 있습니다. 예를 들면 다음과 같습니다.

{@code
            if (barrier.await() == 0) {
              // log the completion of this iteration
            }}

CyclicBarrier 실패한 동기화 시도에 대해 모두 또는 없음 중단 모델을 사용합니다. 중단, 실패 또는 시간 제한으로 인해 스레드가 장벽 지점을 조기에 벗어나면 해당 장벽 지점에서 대기하는 다른 모든 스레드도 (또는 InterruptedException 너무 동시에 중단된 경우)을 통해 BrokenBarrierException 비정상적으로 남게 됩니다.

메모리 일관성 효과: 장벽 작업의 일부인 i>happen-before</i> 작업을 호출await()<하기 전 스레드의 작업으로, 다른 스레드에서 해당 await() 스레드에서 성공적으로 반환된 후 동작이 발생하기 전에 발생합니다.

1.5에 추가되었습니다.

에 대한 Java 설명서입니다 java.util.concurrent.CyclicBarrier.

이 페이지의 일부는 만들고 공유하며 에 설명된 용어에 따라 사용되는 작업을 기반으로 수정됩니다.

생성자

CyclicBarrier(Int32)

지정된 수의 파티(스레드)가 대기하고 장벽이 밟을 때 미리 정의된 작업을 수행하지 않는 새 CyclicBarrier 를 만듭니다.

CyclicBarrier(Int32, IRunnable)

지정된 수의 파티(스레드)가 대기하고 장벽에 진입하는 마지막 스레드에서 수행한 장벽이 트립될 때 지정된 장벽 작업을 실행하는 새 CyclicBarrier 를 만듭니다.

CyclicBarrier(IntPtr, JniHandleOwnership)

JNI 개체의 관리되는 표현을 만들 때 사용되는 생성자입니다. 런타임에서 호출합니다.

속성

Class

Object의 런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
Handle

기본 Android instance 대한 핸들입니다.

(다음에서 상속됨 Object)
IsBroken

이 장벽이 손상된 상태인지 쿼리합니다.

JniIdentityHashCode

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
JniPeerMembers

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

NumberWaiting

현재 장벽에서 대기 중인 파티 수를 반환합니다.

Parties

이 장벽을 여행하는 데 필요한 파티 수를 반환합니다.

PeerReference

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
ThresholdClass

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

ThresholdType

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

메서드

Await()

모든 #getParties 당사자가 이 장벽에서 호출될 await 때까지 기다립니다.

Await(Int64, TimeUnit)

모든 #getParties 당사자가 이 장벽에서 호출 await 되거나 지정된 대기 시간이 경과할 때까지 기다립니다.

AwaitAsync()

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

AwaitAsync(Int64, TimeUnit)

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

Clone()

이 개체의 복사본을 만들고 반환합니다.

(다음에서 상속됨 Object)
Dispose()

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
Dispose(Boolean)

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
Equals(Object)

다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다.

(다음에서 상속됨 Object)
GetHashCode()

개체의 해시 코드 값을 반환합니다.

(다음에서 상속됨 Object)
JavaFinalize()

가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다.

(다음에서 상속됨 Object)
Notify()

이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다.

(다음에서 상속됨 Object)
NotifyAll()

이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다.

(다음에서 상속됨 Object)
Reset()

장벽을 초기 상태로 다시 설정합니다.

SetHandle(IntPtr, JniHandleOwnership)

Handle 속성을 설정합니다.

(다음에서 상속됨 Object)
ToArray<T>()

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
ToString()

개체의 문자열 표현을 반환합니다.

(다음에서 상속됨 Object)
UnregisterFromRuntime()

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
Wait()

현재 스레드가 각성될 때까지 대기하도록 합니다. 일반적으로 <알림을<> 받>거나<<> 중단/em>합니다.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 깨어날 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 중단</>em>>을 받거나 <일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 깨어날 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 중단</>em>>을 받거나 <일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IJavaPeerable.Disposed()

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
IJavaPeerable.DisposeUnlessReferenced()

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
IJavaPeerable.Finalized()

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
IJavaPeerable.JniManagedPeerState

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

GetJniTypeName(IJavaPeerable)

스레드 집합이 모두 서로 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 지원입니다.

적용 대상