> Java > java지도 시간 > Semaphore를 사용하여 Java에서 전류 제한을 구현하는 방법은 무엇입니까?

Semaphore를 사용하여 Java에서 전류 제한을 구현하는 방법은 무엇입니까?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2023-04-21 20:34:06
앞으로
1576명이 탐색했습니다.

개념

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿