JavaTM Platform
Standard Ed. 6

java.util.concurrent
클래스 Semaphore

java.lang.Object 
  상위를 확장 java.util.concurrent.Semaphore
모든 구현된 인터페이스:
Serializable


public class Semaphore
extends Object
implements Serializable

계수 세마포어-입니다. 개념적으로, 세마포어-는 허가(permit)세트를 유지합니다. 각 acquire() 는 허가가 이용 가능하게 될 때까지 필요에 따라서 블록 해, 이용 가능하게 되면(자) 허가(permit)를 가져옵니다. 각 release() 는 허가(permit)를 추가해, 경우에 따라서는 블록 하고 있는 취득측을 해제합니다. 다만, 실제의 허가(permit) 객체는 사용되지 않습니다. Semaphore 에서는, 이용 가능한 수를 세어, 거기에 응한 처리를 실시할 뿐입니다.

세마포어-는, 물리적 또는 논리적인 일부의 자원에 액세스 가능한 thread수를 제한하기 위해서 자주(잘) 사용됩니다. 예를 들어, 다음의 클래스에서는, 세마포어-를 사용해 항목의 풀에의 액세스를 제어합니다.

 class Pool {
   private static final int MAX_AVAILABLE = 100;
   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);

   public Object getItem() throws InterruptedException {
     available.acquire();
     return getNextAvailableItem();
   }

   public void putItem(Object x) {
     if (markAsUnused(x))
       available.release();
   }

   // Not a particularly efficient data structure; just for demo

   protected Object[] items = ... whatever kinds of items being managed
   protected boolean[] used = new boolean[MAX_AVAILABLE];

   protected synchronized Object getNextAvailableItem() {
     for (int i = 0; i < MAX_AVAILABLE; ++i) {
       if (! used[i]) {
          used[i] = true;
          return items[i];
       }
     }
     return null; // not reached
   }

   protected synchronized boolean markAsUnused(Object item) {
     for (int i = 0; i < MAX_AVAILABLE; ++i) {
       if (item == items[i]) {
          if (used[i]) {
            used[i] = false;
            return true;
          } else
            return false;
       }
     }
     return false;
   }

 }
 

항목을 취득하기 전에, 각 thread는 세마포어-로부터, 항목이 사용 가능한 것을 보증하는 허가(permit)를 취득할 필요가 있습니다. 항목의 처리가 완료하면(자) thread는 풀로 돌아가, 허가(permit)가 세마포어-에 돌려주어져 다른 thread가 그 항목을 취득할 수 있게 됩니다. acquire() 의 호출시에 동기 락은 보관 유지되지 않습니다. 이것은 동기 락에 의해, 항목을 풀에 돌려줄 수가 없게 되기 (위해)때문에입니다. 세마포어-는, 풀에의 액세스를 제한할 필요가 있는 동기를, 풀 자체의 일관성을 유지하기 위해서 필요한 동기부터는 분리해 캡슐화합니다.

값을 1 에 초기화된 세마포어-는, 이용할 수 있는 허가(permit)가 최대로 1 개인 세마포어-로서 사용되기 (위해)때문에, 상호 배타 락으로서 이용할 수 있습니다. 이것은 일반적으로는 「2 진형세마포어-」(이)라고 불립니다. 이용 가능한 허가(permit)가 1 개나 0 개인가의 2 개 상태 밖에 없기 때문입니다. 이와 같이 사용되는 경우, 많은 Lock 구현과는 달라, 2 진형세마포어-는, 「락」을 소유자 이외의 thread로 해제할 수 있다고 하는 특성을 가집니다 (세마포어-에는 소유권의 개념이 없기 때문에). 이것은, 데드락의 회복과 같이 특수한 문맥으로 편리합니다.

이 클래스의 생성자 은, 옵션의 「공평성」파라미터를 받아들입니다. false 로 설정하면(자), 이 클래스는 thread가 허가(permit)를 취득하는 순서에 대해 보증하지 않습니다. 특히, 「인터럽트」(barging)이 허가되고 있습니다. 즉,acquire() 를 호출하는 thread에, 대기하고 있던 thread보다 먼저 허가(permit)를 할당하는 것이 가능합니다. 논리적이게는, 새로운 thread가 대기중의 thread의 큐의 선두에 배치되게 됩니다. 공평성이 true 로 설정되면(자), 세마포어-는,acquire 메소드를 호출하는 thread가, 호출이 처리된 순서 (선입처 내, FIFO)로 허가(permit)를 취득하도록(듯이) 선택되는 것을 보증합니다. FIFO 순서부는, 필연적으로 이러한 메소드내의 특정의 내부 실행 포인트에 적용됩니다. 그 때문에, 어느 thread가 다른 thread보다 먼저 acquire 를 호출하지만, 그 thread보다 나중에 순서부 포인트에 이르는 경우가 있습니다. 또, 메소드로부터의 복귀시에도 같은 일이 일어날 가능성이 있습니다. 또, 시간 지정이 없는 tryAcquire 메소드는 공평성 설정을 존중하지 않고, 받아들이지 않습니다만, 이용 가능한 허가(permit)는 가져옵니다.

일반적으로, 자원 액세스를 제어하기 위해서 사용되는 세마포어-는, 자원에의 액세스를 할 수 없는 thread가 없게, 공평하게 초기화될 필요가 있습니다. 다른 종류의 동기 제어에 세마포어-를 사용하는 경우는, 공평성을 고려하는 것보다도 불공평한 순서부에 의한 throughput의 이점 쪽이 자주 중요하게 됩니다.

이 클래스에는, 동시에 복수의 허가(permit)를 취득해제 하기 위한 편리한 메소드도 있습니다. 공평성을 true 로 설정하지 않고 이러한 메소드를 사용하면(자), 무기한으로 연기되는 위험이 늘어나는 것에 주의해 주세요.

메모리 무결성 효과:release() 등의 「해제」메소드를 호출하기 전의 thread내의 액션은, 다른 thread로 acquire() 등의 정상 종료한 「취득」메소드에 계속되는 액션보다「전에 발생」합니다.

도입된 버젼:
1.5
관련 항목:
직렬화 된 형식

생성자 의 개요
Semaphore (int permits)
          지정된 수의 허가(permit)와 불공평한 공평성 설정을 사용해,Semaphore 를 작성합니다.
Semaphore (int permits, boolean fair)
          지정된 수의 허가(permit)와 지정된 공평성 설정을 사용해,Semaphore 를 작성합니다.
 
메소드의 개요
 void acquire ()
          이 세마포어-로부터 허가(permit)를 가져옵니다.
 void acquire (int permits)
          이 세마포어-로부터 지정된 수의 허가(permit)를 가져옵니다.
 void acquireUninterruptibly ()
          이 세마포어-로부터 허가(permit)를 가져옵니다.
 void acquireUninterruptibly (int permits)
          이 세마포어-로부터 지정된 수의 허가(permit)를 가져옵니다.
 int availablePermits ()
          이 세마포어-로 현재 이용 가능한 허가(permit)의 수를 돌려줍니다.
 int drainPermits ()
          곧바로 이용 가능한 모든 허가(permit)를 취득해 돌려줍니다.
protected  Collection <Thread > getQueuedThreads ()
          허가(permit)의 취득을 대기하고 있는 thread를 포함한 컬렉션을 돌려줍니다.
 int getQueueLength ()
          허가(permit)의 취득을 대기하고 있는 thread의 추정수를 돌려줍니다.
 boolean hasQueuedThreads ()
          허가(permit)의 취득을 대기중의 thread가 존재할지 어떨지를 조회합니다.
 boolean isFair ()
          이 세마포어-로 공평성이 true 로 설정되어 있는 경우는 true 를 돌려줍니다.
protected  void reducePermits (int reduction)
          지정된 reduction 의 수만큼 이용 가능한 허가(permit)의 수를 줄입니다.
 void release ()
          허가(permit)를 해제해, 세마포어-에 되돌립니다.
 void release (int permits)
          지정된 수의 허가(permit)를 해제해, 세마포어-에 되돌립니다.
 String toString ()
          세마포어- 및 그 상태를 식별하는 캐릭터 라인을 돌려줍니다.
 boolean tryAcquire ()
          허가(permit)가 호출해 때에 이용 가능한 경우에 한정해, 이 세마포어-로부터 허가(permit)를 가져옵니다.
 boolean tryAcquire (int permits)
          지정된 수의 허가(permit)가 호출해 때에 이용 가능한 경우에 한정해, 그 모든 허가(permit)를 가져옵니다.
 boolean tryAcquire (int permits, long timeout, TimeUnit  unit)
          지정된 대기 시간내에 지정된 수의 허가(permit)가 이용 가능하고, 현재의 thread로 인터럽트 가 발생하고 있지 않는 경우에, 이 세마포어-로부터 지정된 수의 허가(permit)를 가져옵니다.
 boolean tryAcquire (long timeout, TimeUnit  unit)
          지정된 대기 시간내에 허가(permit)가 이용 가능하게 되어, 현재의 thread로 인터럽트 가 발생하고 있지 않는 경우에, 이 세마포어-로부터 허가(permit)를 가져옵니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , wait , wait , wait
 

생성자 의 상세

Semaphore

public Semaphore(int permits)
지정된 수의 허가(permit)와 불공평한 공평성 설정을 사용해,Semaphore 를 작성합니다.

파라미터:
permits - 이용 가능한 허가(permit)의 초기의 수. 이 값은 부로 하는 일도 가능해, 그 경우는 취득 메소드가 허가를 받기 전에 해제이 발생할 필요가 있다

Semaphore

public Semaphore(int permits,
                 boolean fair)
지정된 수의 허가(permit)와 지정된 공평성 설정을 사용해,Semaphore 를 작성합니다.

파라미터:
permits - 이용 가능한 허가(permit)의 초기의 수. 이 값은 부로 하는 일도 가능해, 그 경우는 취득 메소드가 허가를 받기 전에 해제이 발생할 필요가 있는
fair - 이 세마포어-가 경합시에 허가(permit)의 허가를 선입선출으로 보증하는 경우는 true, 그렇지 않은 경우는 false
메소드의 상세

acquire

public void acquire()
             throws InterruptedException 
이 세마포어-로부터 허가(permit)를 가져옵니다. 허가(permit)가 이용 가능하게 되는지, 또는 thread가 끼어들어 될 때까지 블록 합니다.

허가(permit)가 이용 가능한 경우는 허가(permit)를 취득하자 마자 복귀하기 위해(때문에), 이용 가능한 허가(permit)의 수는 1 개씩 줄어듭니다.

허가(permit)가 이용 가능하지 않은 경우, 현재의 thread는 thread의 스케줄링에 관해서 무효가 되어, 다음의 2 개중 한쪽이 일어날 때까지 대기합니다.

현재의 thread로,

InterruptedException 가 throw 되어 현재의 thread의 인터럽트 상태가 클리어 됩니다.

예외:
InterruptedException - 현재의 thread로 인터럽트가 발생했을 경우

acquireUninterruptibly

public void acquireUninterruptibly()
이 세마포어-로부터 허가(permit)를 가져옵니다. 허가(permit)가 이용 가능하게 될 때까지 블록 합니다.

허가(permit)가 이용 가능한 경우는 허가(permit)를 취득하자 마자 복귀하기 위해(때문에), 이용 가능한 허가(permit)의 수는 1 개씩 줄어듭니다.

허가(permit)가 이용 가능하지 않은 경우, 현재의 thread는 thread의 스케줄링에 관해서 무효가 되어, 다른 thread가 이 세마포어-에 대해서 release() 메소드를 호출해, 현재의 thread가 다음에 허가(permit)를 할당할 수 있는 thread가 될 때까지, 현재의 thread는 대기합니다.

허가(permit)의 대기중에 현재의 thread가 끼어들어 되면(자), 대기는 속행합니다만, thread에 허가(permit)를 할당할 수 있는 타이밍은, 인터럽트가 발생하지 않았던 경우에 허가(permit)를 받아야할 타이밍과는 다른 일이 있습니다. thread가 이 메소드로부터 복귀하면(자), 그 인터럽트 상태가 설정됩니다.


tryAcquire

public boolean tryAcquire()
허가(permit)가 호출해 때에 이용 가능한 경우에 한정해, 이 세마포어-로부터 허가(permit)를 가져옵니다.

허가(permit)가 이용 가능한 경우는 허가(permit)를 취득해 값 true 로 곧바로 복귀하기 위해(때문에), 이용 가능한 허가(permit)의 수는 1 개씩 줄어듭니다.

허가(permit)가 이용 가능하지 않은 경우, 이 메소드는 값 false 로 곧바로 복귀합니다.

이 세마포어-가 공평 순서부 정책를 사용하도록(듯이) 설정되어 있는 경우에서도, 허가(permit)가 사용 가능하면, 다른 thread가 현재 대기하고 있을지 어떨지에 관계없이,tryAcquire() 의 호출로 곧바로 허가(permit)를 가져옵니다. 이 「인터럽트」(barging) 동작에 의해 공평성이 없어진다고는 말할 수 있어 이것은 특정의 상황하로 유용합니다. 공평성 설정을 존중하는 경우는, 거의 등가인 tryAcquire(0, TimeUnit.SECONDS) 를 사용합니다 (이것도 인터럽트를 검출한다).

반환값:
허가(permit)가 취득되었을 경우는 true, 그렇지 않은 경우는 false

tryAcquire

public boolean tryAcquire(long timeout,
                          TimeUnit  unit)
                   throws InterruptedException 
지정된 대기 시간내에 허가(permit)가 이용 가능하게 되어, 현재의 thread로 인터럽트 가 발생하고 있지 않는 경우에, 이 세마포어-로부터 허가(permit)를 가져옵니다.

허가(permit)가 이용 가능한 경우는 허가(permit)를 취득해 값 true 로 곧바로 복귀하기 위해(때문에), 이용 가능한 허가(permit)의 수는 1 개씩 줄어듭니다.

허가(permit)가 이용 가능하지 않은 경우, 현재의 thread는 thread의 스케줄링에 관해서 무효가 되어, 다음의 3 개중 한쪽이 일어날 때까지 대기합니다.

허가(permit)가 취득되면(자),true 가 돌려주어집니다.

현재의 thread로,

InterruptedException 가 throw 되어 현재의 thread의 인터럽트 상태가 클리어 됩니다.

지정된 대기 시간이 경과하면(자), 값 false 가 돌려주어집니다. 시간이 제로 또는 그것보다 작은 경우, 메소드는 대기하지 않습니다.

파라미터:
timeout - 허가(permit)의 최장 대기 시간
unit - timeout 인수의 시간 단위
반환값:
허가(permit)가 취득되었을 경우는 true, 허가(permit)가 취득되기 전에 대기 시간이 경과했을 경우는 false
예외:
InterruptedException - 현재의 thread로 인터럽트가 발생했을 경우

release

public void release()
허가(permit)를 해제해, 세마포어-에 되돌립니다.

허가(permit)를 해제하면(자), 이용 가능한 허가(permit)의 수가 1 개씩 증가합니다. 몇개의 thread가 허가(permit)를 취득하려고 시도하고 있는 경우는, 그 중의 1 개의 thread가 선택되어 해제된지 얼마 안된 허가(permit)가 주어집니다. 그 thread는, thread의 스케줄링에 관해서 (다시) 유효하게 됩니다.

허가(permit)를 해제하는 thread는,acquire() 의 호출로 그 허가(permit)를 취득하고 있을 필요는 없습니다. 세마포어-의 적절한 사용법은, 어플리케이션에서의 프로그래밍 규약으로 확립됩니다.


acquire

public void acquire(int permits)
             throws InterruptedException 
이 세마포어-로부터 지정된 수의 허가(permit)를 가져옵니다. 모든 허가(permit)가 이용 가능하게 되는지, 또는 thread가 끼어들어 될 때까지 블록 합니다.

지정된 수의 허가(permit)가 이용 가능한 경우는 허가(permit)를 취득하자 마자 복귀하기 위해(때문에), 이용 가능한 허가(permit)의 수는 지정된 수씩 줄어듭니다.

충분한 수의 허가(permit)가 이용 가능하지 않은 경우, 현재의 thread는 thread의 스케줄링에 관해서 무효가 되어, 다음의 2 개중 한쪽이 일어날 때까지 대기합니다.

현재의 thread로,

InterruptedException 가 throw 되어 현재의 thread의 인터럽트 상태가 클리어 됩니다. 이 thread에 할당할 수 있을 것이었다 모든 허가(permit)는,release() 의 호출로 허가(permit)가 이용 가능하게 되었는지와 같이, 허가(permit)의 취득을 시도하는 다른 thread에 할당할 수 있습니다.

파라미터:
permits - 취득하는 허가(permit)의 수
예외:
InterruptedException - 현재의 thread로 인터럽트가 발생했을 경우
IllegalArgumentException - permits 가 0 보다 작은 값의 경우

acquireUninterruptibly

public void acquireUninterruptibly(int permits)
이 세마포어-로부터 지정된 수의 허가(permit)를 가져옵니다. 모든 허가(permit)가 이용 가능하게 될 때까지 블록 합니다.

지정된 수의 허가(permit)가 이용 가능한 경우는 허가(permit)를 취득하자 마자 복귀하기 위해(때문에), 이용 가능한 허가(permit)의 수는 지정된 수씩 줄어듭니다.

충분한 수의 허가(permit)가 이용 가능하지 않은 경우, 현재의 thread는 thread의 스케줄링에 관해서 무효가 되어, 다른 thread가 이 세마포어-에 대해서 release 메소드의 어느쪽이든을 호출해, 현재의 thread가 다음에 허가(permit)를 할당할 수 있는 thread가 되어, 이용 가능한 허가(permit)의 수가 이 요구를 채울 때까지, 현재의 thread는 대기합니다.

현재의 thread가 허가(permit)의 대기중에 끼어들어졌을 경우, 대기를 속행합니다. 큐내에서의 현재의 thread의 위치에는 영향 없습니다. thread가 이 메소드로부터 복귀하면(자), 그 인터럽트 상태가 설정됩니다.

파라미터:
permits - 취득하는 허가(permit)의 수
예외:
IllegalArgumentException - permits 가 0 보다 작은 값의 경우

tryAcquire

public boolean tryAcquire(int permits)
지정된 수의 허가(permit)가 호출해 때에 이용 가능한 경우에 한정해, 그 모든 허가(permit)를 가져옵니다.

지정된 수의 허가(permit)가 이용 가능한 경우는 허가(permit)를 취득해 값 true 로 곧바로 복귀하기 위해(때문에), 이용 가능한 허가(permit)의 수는 지정된 수씩 줄어듭니다.

충분한 수의 허가(permit)가 이용 가능하지 않은 경우, 이 메소드는 값 false 로 곧바로 복귀해, 이용 가능한 허가(permit)의 수는 변화하지 않습니다.

이 세마포어-가 공평 순서부 정책를 사용하도록(듯이) 설정되어 있는 경우에서도, 허가(permit)가 사용 가능하면, 다른 thread가 현재 대기하고 있을지 어떨지에 관계없이,tryAcquire() 의 호출로 곧바로 허가(permit)를 가져옵니다. 이 「인터럽트」(barging) 동작에 의해 공평성이 없어진다고는 말할 수 있어 이것은 특정의 상황하로 유용합니다. 공평성 설정을 존중하는 경우는, 거의 등가인 tryAcquire(permits, 0, TimeUnit.SECONDS) 를 사용합니다 (이것도 인터럽트를 검출한다).

파라미터:
permits - 취득하는 허가(permit)의 수
반환값:
허가(permit)가 취득되었을 경우는 true, 그렇지 않은 경우는 false
예외:
IllegalArgumentException - permits 가 0 보다 작은 값의 경우

tryAcquire

public boolean tryAcquire(int permits,
                          long timeout,
                          TimeUnit  unit)
                   throws InterruptedException 
지정된 대기 시간내에 지정된 수의 허가(permit)가 이용 가능하고, 현재의 thread로 인터럽트 가 발생하고 있지 않는 경우에, 이 세마포어-로부터 지정된 수의 허가(permit)를 가져옵니다.

지정된 수의 허가(permit)가 이용 가능한 경우는 허가(permit)를 취득해 값 true 로 곧바로 복귀하기 위해(때문에), 이용 가능한 허가(permit)의 수는 지정된 수씩 줄어듭니다.

충분한 수의 허가(permit)가 이용 가능하지 않은 경우, 현재의 thread는 thread의 스케줄링에 관해서 무효가 되어, 다음의 3 개중 한쪽이 일어날 때까지 대기합니다.

허가(permit)가 취득되면(자),true 가 돌려주어집니다.

현재의 thread로,

InterruptedException 가 throw 되어 현재의 thread의 인터럽트 상태가 클리어 됩니다. 이 thread에 할당할 수 있을 것이었다 모든 허가(permit)는,release() 의 호출로 허가(permit)가 이용 가능하게 되었는지와 같이, 허가(permit)의 취득을 시도하는 다른 thread에 할당할 수 있습니다.

지정된 대기 시간이 경과하면(자), 값 false 가 돌려주어집니다. 시간이 제로 또는 그것보다 작은 경우, 메소드는 대기하지 않습니다. 이 thread에 할당할 수 있을 것이었다 모든 허가(permit)는,release() 의 호출로 허가(permit)가 이용 가능하게 되었는지와 같이, 허가(permit)의 취득을 시도하는 다른 thread에 할당할 수 있습니다.

파라미터:
permits - 취득하는 허가(permit)의 수
timeout - 허가(permit)의 최장 대기 시간
unit - timeout 인수의 시간 단위
반환값:
모든 허가(permit)가 취득되었을 경우는 true, 모든 허가(permit)가 취득되기 전에 대기 시간이 경과했을 경우는 false
예외:
InterruptedException - 현재의 thread로 인터럽트가 발생했을 경우
IllegalArgumentException - permits 가 0 보다 작은 값의 경우

release

public void release(int permits)
지정된 수의 허가(permit)를 해제해, 세마포어-에 되돌립니다.

지정된 수의 허가(permit)를 해제하면(자), 이용 가능한 허가(permit)의 수가 그 만큼 증가합니다. 몇개의 thread가 허가(permit)를 취득하려고 시도하고 있는 경우, 그 중의 1 개의 thread가 선택되어, 해제된지 얼마 안된 허가(permit)가 주어집니다. 이용 가능한 허가(permit)의 수가 그 thread의 요구를 채우는 경우, 그 thread는 thread의 스케줄링에 관해서 (다시) 유효하게 됩니다. 그렇지 않은 경우, 충분한 허가(permit)가 이용 가능하게 될 때까지 thread는 대기합니다. 이 thread의 요구를 채운 뒤도 계속 허가(permit)가 이용 가능한 경우, 그러한 허가(permit)는 허가(permit)를 취득하려고 하고 있는 다른 thread에 할당할 수 있습니다.

허가(permit)를 해제하는 thread는,acquire 의 호출로 그 허가(permit)를 취득하고 있을 필요는 없습니다. 세마포어-의 적절한 사용법은, 어플리케이션에서의 프로그래밍 규약으로 확립됩니다.

파라미터:
permits - 해제하는 허가(permit)의 수
예외:
IllegalArgumentException - permits 가 0 보다 작은 값의 경우

availablePermits

public int availablePermits()
이 세마포어-로 현재 이용 가능한 허가(permit)의 수를 돌려줍니다.

일반적으로, 이 메소드는 디버그와 테스트의 경우에 사용합니다.

반환값:
이 세마포어-로 이용 가능한 허가(permit)의 수

drainPermits

public int drainPermits()
곧바로 이용 가능한 모든 허가(permit)를 취득해 돌려줍니다.

반환값:
취득된 허가(permit)의 수

reducePermits

protected void reducePermits(int reduction)
지정된 reduction 의 수만큼 이용 가능한 허가(permit)의 수를 줄입니다. 이 메소드는, 이용 불가능하게 되는 자원을 추적하기 위해서 세마포어-를 사용하는 서브 클래스에서 유용합니다. 허가(permit)가 이용 가능하게 될 때까지 블록 해 대기하지 않는 점으로써, 이 메소드는 acquire 와 다릅니다.

파라미터:
reduction - 삭제하는 허가(permit)의 수
예외:
IllegalArgumentException - reduction 가 0 보다 작은 값의 경우

isFair

public boolean isFair()
이 세마포어-로 공평성이 true 로 설정되어 있는 경우는 true 를 돌려줍니다.

반환값:
이 세마포어-로 공평성이 true 로 설정되어 있는 경우는 true

hasQueuedThreads

public final boolean hasQueuedThreads()
허가(permit)의 취득을 대기중의 thread가 존재할지 어떨지를 조회합니다. 취소는 언제라도 발생할 가능성이 있기 (위해)때문에, true 가 돌려주어져도, 다른 몇개의 thread가 허가(permit)를 취득하는 것은 보증되고 있지 않습니다. 이 메소드는, 주로 시스템 상태의 감시에 사용하는 목적으로 설계되고 있습니다.

반환값:
락의 취득을 대기중외의 thread가 존재할 가능성이 있는 경우는 true

getQueueLength

public final int getQueueLength()
허가(permit)의 취득을 대기하고 있는 thread의 추정수를 돌려줍니다. 이 메소드가 내부의 데이터 구조를 횡단(traverse) 하고 있는 동안에도, thread수가 동적으로 변화하는 경우가 있기 (위해)때문에, 이 값은 추정에 지나지 않습니다. 이 메소드는, 동기의 제어용으로서가 아니고, 시스템 상태의 감시용으로서 설계되고 있습니다.

반환값:
이 락을 대기하고 있는 thread의 추정수

getQueuedThreads

protected Collection <Thread > getQueuedThreads()
허가(permit)의 취득을 대기하고 있는 thread를 포함한 컬렉션을 돌려줍니다. 실제의 thread 세트는, 결과의 구축중에도 동적으로 변화할 가능성이 있기 (위해)때문에, 반환되는 컬렉션은 최선이 노력한 다음의 추정에 지나지 않습니다. 반환되는 컬렉션의 요소에는, 특정의 순서는 존재하지 않습니다. 이 메소드는, 보다 포괄적인 감시 기능을 제공하는 서브 클래스의 구축을 용이하게 하는 목적으로 설계되고 있습니다.

반환값:
thread의 컬렉션

toString

public String  toString()
세마포어- 및 그 상태를 식별하는 캐릭터 라인을 돌려줍니다. 상태는 괄호로 둘러싸여 캐릭터 라인 "Permits =" 에 이어 허가(permit)의 수가 포함됩니다.

오버라이드(override):
클래스 Object 내의 toString
반환값:
이 세마포어- 및 그 상태를 식별하는 캐릭터 라인

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.