세마포어는 Java 동시 프로그래밍에서 다중 스레드 리소스 액세스를 제어하는 메커니즘입니다. 라이센스 수는 초기화 중에 스레드가 동시에 액세스할 수 있는 보호 리소스 수를 나타냅니다. 스레드가 리소스에 액세스하려고 하면 라이센스 얻기를 시도합니다. 사용 가능한 라이센스가 없으면 라이센스를 사용할 수 있을 때까지 스레드가 차단됩니다.
세마포어는 Java 동시 프로그래밍의 중요한 메커니즘으로, 멀티스레드 시나리오에서 리소스 액세스를 제어하는 데 사용됩니다. 리소스를 보호하는 공유 데이터 구조에 대한 라이선스를 생성하여 이를 수행합니다.
세마포는 초기화 시 라이센스 수를 지정합니다. 이는 보호된 리소스에 동시에 액세스할 수 있는 최대 스레드 수를 나타냅니다. 스레드가 리소스에 액세스하려고 하면 세마포어에 대한 라이센스를 얻으려고 시도합니다. 사용 가능한 경우 라이센스가 부여되고 스레드가 리소스에 액세스할 수 있습니다. 사용 가능한 라이센스가 없으면 라이센스를 사용할 수 있을 때까지 스레드가 차단됩니다.
공유 리소스, 즉 대기열이 있다고 가정합니다. 동시에 5개의 스레드만 대기열에 액세스할 수 있습니다. 이를 보장하기 위해 세마포어를 사용할 수 있습니다.
import java.util.concurrent.Semaphore; import java.util.Queue; public class Example { private static final int MAX_ACCESS_COUNT = 5; private static Semaphore semaphore = new Semaphore(MAX_ACCESS_COUNT); private static Queue<Integer> queue = new ConcurrentLinkedQueue<>(); public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread(() -> accessQueue()).start(); } } private static void accessQueue() { try { // 尝试获取一个许可证 semaphore.acquire(); // 访问队列 queue.add((int) (Math.random() * 100)); // 释放许可证 semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }
이 예에서 세마포어는 5개의 라이선스로 초기화됩니다. 이렇게 하면 최대 5개의 스레드만 동시에 대기열에 액세스할 수 있습니다. 라이센스를 사용할 수 있을 때까지 다른 스레드는 차단됩니다.
세마포어는 공유 리소스에 대한 동시 액세스를 제어하는 데 매우 유용합니다. 동시에 리소스에 액세스할 수 있는 스레드 수를 제한하여 데이터 경합 및 불일치를 방지하는 데 도움이 됩니다.
위 내용은 Java 함수 동시성 및 멀티스레딩에서 세마포어의 역할은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!