개념
1. 세마포어는 세마포어로 널리 번역된 것으로 볼 수 있습니다. 개념적으로 세마포어는 자격 증명을 획득한 스레드가 리소스에 액세스하고 사용 후 이를 해제할 수 있습니다. 세마포어를 사용하여 특정 리소스에 액세스하는 동시 스레드를 제한할 수 있습니다.
2. 간단히 카운터, 대기 큐, 세 가지 방법으로 요약할 수 있습니다. 세마포어 모델에서 카운터와 대기 큐는 투명하며 세마포어 모델에서 제공하는 세 가지 방법, 즉 인터넷, 획득 및 해제를 통해서만 액세스할 수 있습니다.
인스턴스
public class SemaphoreDemo { static class Link { } static class ObjPool<T, R> { final List<T> pool; final Semaphore semaphore; ObjPool(int size, T t) { pool = new Vector<>(size); for (int i = 0; i < size; i++) { pool.add(t); } semaphore = new Semaphore(size); } public R exec(Function<T, R> func) throws Exception { T t = null; semaphore.acquire(); try { System.out.println(Thread.currentThread().getName() + "---------争夺锁--------"); t = pool.remove(0); System.out.println(Thread.currentThread().getName() + " 拿到锁执行"); return func.apply(t); } finally { pool.add(t); semaphore.release(); } } } public static void main(String[] args) { ObjPool objPool = new ObjPool(5, new Link()); for (int i = 0; i < 30; i++) { new Thread(() -> { try { objPool.exec(t -> t.toString()); } catch (Exception e) { } }).start(); } } }
위 내용은 Semaphore를 사용하여 Java에서 전류 제한을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!