자바 세마포어 예제

자바 세마포어 예제

Uncategorized -

실행기서비스에서 실행되는 작업 수를 제한하는 Java 세마포어 예제입니다. 이 예제에서는 5 호출 가능한 작업이 실행기Service에 제출되지만 2개의 작업만 동시에 실행됩니다. 누군가가 출력 (세마포를 사용하여) 1Aa2Bb3Cc를 생성하는 데 도움이 될 수 있습니다 … 그래서, 나는 3 개의 스레드 (하나의 인쇄 번호, 하나의 인쇄 대문자, 하나의 인쇄 작은 글자)가있는 경우. 그러나 몇 시간 동안 잠을 자고 나면 세마포가 허가를 재설정하고 해제해야합니다 : 세마포는 종종 일부 (물리적 또는 논리적) 리소스에 액세스 할 수있는 것보다 스레드 수를 제한하는 데 사용됩니다. 예를 들어, 여기에 세마포를 사용하여 항목 풀에 대한 액세스를 제어하는 클래스가 있습니다: 뮤텍스는 이진 세마포와 유사하게 작동하며 상호 제외를 구현하는 데 사용할 수 있습니다. 여러 소비자가 있는 경우 어떻게 해야 합니까? 위의 Java 자습서에서 소비자 (생산자가 아님)는 경주 조건을 방지하기 위해 패킷을 읽을 때 버퍼를 잠그어야합니다 (세마포를 획득 할 때는 아님). 아래 예제에서는 모든 것이 동일한 JVM에 있기 때문에 생산자도 목록을 잠그습니다. 자바 동시성은 매우 넓은 주제입니다. 사용할 수 있는 수백 개의 자습서 및 예제가 있습니다.

몇 시간 전 나는 자바에서 동시에 여러 스레드를 실행하고 동기화 된 블록의 다른 유형에 대한 몇 가지 자습서를 작성했습니다. 그냥 하나 더 많은 정보가 필요. Java Object의 대기(), 알림() 및 notifyAll()에 대한 좋은 기사가 있습니까? 위의 튜토리얼에서 CrunchifysemaphoreMutexTutorial.java 때 CrunchifyProducer 는 crunchifyList 링크리스트 개체에 스레드 이름을 추가하면 세마포를 신호 할 수 있습니다. 이진 세마포의 사용을 표시하기 위해 동시 태스크에서 작업을 인쇄하는 데 사용할 수 있는 인쇄 대기열을 구현할 예정입니다. 이 인쇄 대기열은 이진 세마포에 의해 보호되므로 한 번에 하나의 스레드만 인쇄할 수 있습니다. 인쇄Job.java 일반적으로 세마포를 사용하려면 공유 리소스에 대한 액세스를 원하는 스레드가 허가를 획득하려고 시도합니다. 세마포를 사용하여 리소스에 대한 액세스를 잠글 수 있으며, 해당 리소스를 사용하려는 각 스레드는 잠금을 획득하기 위해 리소스에 액세스하기 전에 acquire()를 먼저 호출해야 합니다. 스레드가 리소스로 완료되면 릴리스() 잠금을 호출해야 합니다.

세마포의 카운터 값은 항상 제한 0 %= n >= 5 안에 있어야 합니다.