java semaphore 예제

뮤텍스는 이진 세마포와 유사하게 작용하며, 상호 배제를 구현하는 데 사용할 수 있습니다. 실행기서비스에서 실행되는 작업 수를 제한하는 Java 세마포어 예제입니다. 이 예제에서는 5 호출 가능한 작업이 실행기Service에 제출되지만 2개의 작업만 동시에 실행됩니다. 이 클래스는 프린터 큐/프린터를 나타냅니다. 이 세마포어 생성자의 매개 변수로 값 1을 전달하므로 이진 세마포를 만듭니다. 세마포는 하나에 초기화되고, 사용할 수 있는 최대 하나의 허가만 있도록 사용되는 세마포는 상호 배제 잠금으로 사용될 수 있다. 이것은 더 일반적으로 이진 세마포로 알려져, 그것은 단지 두 개의 상태를 가지고 있기 때문에: 하나의 허용 을 사용할 수, 또는 제로 사용 가능한 허가. 이러한 방식으로 사용하면 이진 세마포어에는 많은 Lock 구현과 달리 속성이 있으며, “lock”은 소유자 이외의 스레드에서 해제할 수 있습니다(세마포는 소유권에 대한 개념이 없음). 교착 상태 복구와 같은 일부 특수 한 컨텍스트에서 유용할 수 있습니다. 항목을 얻기 전에 각 스레드는 세마포에서 허가를 획득해야 하며, 항목을 사용할 수 있는지 보장합니다. 스레드가 항목으로 완료되면 풀로 반환되고 허가증이 세마포어로 반환되어 다른 스레드가 해당 항목을 획득할 수 있습니다. acquire()가 호출될 때 동기화 잠금이 유지되지 않습니다. 세마포어는 풀 자체의 일관성을 유지하는 데 필요한 동기화와는 별도로 풀에 대한 액세스를 제한하는 데 필요한 동기화를 캡슐화합니다.

문서의 첫 번째 줄은 뮤텍스는 ressource에 1 및 1 동시 가속만 허용하는 세마포어라고 명시되어 있습니다. 따라서 코드가 동일하게 “보기”하지만 첫 번째 코드가 아닌 이유 : // max 4 people 정적 세마포어 = 새로운 세마포어 (4); 및 제2 코드: // max 1명 정적 세마포세마포 = 새로운 세마포어(1); Java 다중 스레드 예제에서는 Semaphore 및 Mutex를 사용하여 리소스에 액세스하는 스레드 수를 제한하는 방법을 보여 주습니다. 공식 정의: “세마포는 공유 리소스의 동시 사용자 수를 최대 수로 제한합니다. 스레드는 리소스에 대한 액세스를 요청할 수 있으며(세마포 를 감소) 리소스 사용이 완료되었다는 신호를 표시할 수 있습니다(세마포 증가). 다음 예제에서는 시스템의 사용자 수를 제한하기 위해 간단한 로그인 큐를 구현합니다. 위의 Java 자습서에서 소비자 (생산자가 아님)는 경주 조건을 방지하기 위해 패킷을 읽을 때 버퍼를 잠그어야합니다 (세마포를 획득 할 때는 아님). 아래 예제에서는 모든 것이 동일한 JVM에 있기 때문에 생산자도 목록을 잠그습니다. 그러나 몇 시간 동안 잠을 자고 나면 세마포가 허가를 재설정하고 해제해야합니다: 세마포는 카운터를 사용하여 공유 리소스에 대한 액세스를 제어합니다. 카운터가 0보다 크면 액세스가 허용됩니다. 0이면 액세스가 거부됩니다.

카운터가 계산하는 것은 공유 리소스에 대한 액세스를 허용하는 허용 권한입니다. 따라서 리소스에 액세스하려면 스레드가 세마포로부터 허가를 받아야 합니다. 이 빠른 자습서에서는 Java에서 세마포와 뮤텍스의 기본 을 살펴보겠습니다. 누군가가 출력 (세마포를 사용하여) 1Aa2Bb3Cc를 생성하는 데 도움이 될 수 있습니다 … 그래서, 나는 3 개의 스레드 (하나의 인쇄 번호, 하나의 인쇄 대문자, 하나의 인쇄 작은 글자)가있는 경우. 다음 예제에서는 간단한 이진 세마포를 사용하여 카운터를 작성합니다. 일반적으로 리소스 액세스를 제어하는 데 사용되는 세마포는 리소스에 액세스하는 데 필요한 스레드가 부족하지 않도록 공정하게 초기화해야 합니다.