INNENTÜREN, TUNING DESIGN TÜREN aus Slowenien.


  • Ljubljana


    0038651 - 660 - 406

  • Ptuj


    0038651 - 316 - 130
    0038631 - 688 - 777

java semaphore 예제

java semaphore 예제

이 세마포어가 공정한 주문 정책을 사용하도록 설정된 경우에도 tryAcquire()에 대한 호출은 다른 스레드가 현재 대기 중인지 여부에 관계없이 사용 가능한 경우 즉시 허가를 획득합니다. 이 “짖는” 동작은 공정성을 깨뜨리더라도 특정 상황에서 유용할 수 있습니다. 공정성 설정을 사용하려면 tryAcquire(0, TimeUnit.SECONDS)를 사용하여 거의 동일합니다(중단도 감지). 요컨대, 세마포어는 허가 (티켓)의 집합을 유지, 각 취득 () 세마포어에서 허가 (티켓)를 취할 것입니다, 각 릴리스 () 다시 세마포에 허가 (티켓)를 반환합니다. 허가(티켓)를 사용할 수 없는 경우 acquire()가 사용할 수 있을 때까지 차단됩니다. 다음 예제에서는 간단한 이진 세마포를 사용하여 카운터를 작성합니다. 이 세마포어 생성자의 매개 변수로 값 1을 전달하므로 이진 세마포를 만듭니다. 다음 예제에서는 시스템의 사용자 수를 제한하기 위한 간단한 로그인 큐를 구현합니다. 이 세마포에 대한 메서드와 현재 스레드는 허가를 할당 할 옆에 있습니다.

그런 다음 CrunchifyConsumer는 세마포를 획득하려고 시도할 수 있으므로 CrunchifyProducer가 threadID가 추가될 때까지 대기할 수 있습니다. 추가 된 데이터를 신호하면 소비자 중 하나가 깨어나고 crunchifyList 개체를 읽을 수 있다는 것을 알 수 있습니다. 그것은 목록을 읽을 수 있습니다. 뮤텍스는 이진 세마포와 유사하게 작용하며, 상호 배제를 구현하는 데 사용할 수 있습니다. 세마포는 하나에 초기화되고, 사용할 수 있는 최대 하나의 허가만 있도록 사용되는 세마포는 상호 배제 잠금으로 사용될 수 있다. 이것은 더 일반적으로 이진 세마포로 알려져, 그것은 단지 두 개의 상태를 가지고 있기 때문에: 하나의 허용 을 사용할 수, 또는 제로 사용 가능한 허가. 이러한 방식으로 사용하면 이진 세마포어에는 많은 Lock 구현과 달리 속성이 있으며, “lock”은 소유자 이외의 스레드에서 해제할 수 있습니다(세마포는 소유권에 대한 개념이 없음). 교착 상태 복구와 같은 일부 특수 한 컨텍스트에서 유용할 수 있습니다. printJob() 방법을 살펴보십시오.

이 메서드는 세마포를 사용하여 중요한 섹션을 구현하고 공유 리소스에 대한 액세스를 보호할 때 수행해야 하는 세 가지 단계를 보여 주며, Java 다중 스레드 예제에서는 Semaphore 및 Mutex를 사용하여 리소스에 액세스하는 스레드 수를 제한하는 방법을 보여 주습니다. . 이진 세마포의 사용을 표시하기 위해 동시 태스크에서 작업을 인쇄하는 데 사용할 수 있는 인쇄 대기열을 구현할 예정입니다. 이 인쇄 대기열은 이진 세마포에 의해 보호되므로 한 번에 하나의 스레드만 인쇄할 수 있습니다. 인쇄Job.java 세마포의 카운터 값은 항상 제한 0 %= n == 5 안에 있어야 합니다. 그것은 부정하지 않음을 의미합니다. 이 클래스의 생성자는 선택적으로 공정성 매개 변수를 허용합니다. false를 설정하면 이 클래스는 스레드가 허가를 획득하는 순서에 대해 보장하지 않습니다. 특히, 바깅이 허용됩니다, 즉, acquire()를 호출하는 스레드는 대기 중이던 스레드보다 먼저 허가를 할당할 수 있습니다 – 논리적으로 새 스레드는 대기 스레드큐의 헤드에 자신을 배치합니다.