2013-03-01 3 views
3

궁금해하는 방법 아니요 세마포어를 사용하여 연결을 제한하십시오.자바 무제한 세마포어

그래서 "너는 바보 같아."라고 생각할 수도 있습니다. 그러나 제한적이고 무제한의 경우를 균일하게 처리 할 수 ​​있기 때문에 코드를 간소화합니다. 내가 방법 수십 가지고 올 수

if(limited) { 
    semaphore.acquire(); 
} 

뭔가를 작성하는 방법에 대한 조언을 찾는 게 아니에요

참고로 분기이 작업을 수행하는 경우 명령문.

더 구체적으로 저는 Apache Commons 또는 Java 솔루션을 찾고 있습니다. 이것은 단순한 상황으로 해결할 수있는 자신 만의 간단한 클래스를 작성할 수 있지만 널리 사용 가능한 유틸리티 솔루션이있을 때이를 사용하는 것이 더 좋습니다.

+2

아마도 '연결'은 사용할 적절한 용어가 아닙니다. *** 그러나 ***, Integer.MAX_VALUE를 사용하여 세마포를 만들지 못하도록하는 것은 무엇입니까? '무제한'을 모방 할만큼 충분히 커. – Perception

+0

내 응용 프로그램에서 @Perception이 확실하다는 사실은 일반적으로 40 억 회의 실행이 문제가되지 않는다는 것입니다 (금융 거래, Gmail 또는 Yahoo의 경우 전자 메일 ...) – djechlin

답변

1

세마포어는 인터페이스가 아닌 클래스이기 때문에 논리에서 어떤 형태의 브랜칭이 있어야합니다. "if (flag)"가 코드 주위를 검사하는 것을 피하기 위해 Semaphore 클래스의 획득 및 릴리스 의미를 포함하는 응용 프로그램에서 사용할 인터페이스를 만들 수 있습니다. 이 시점에서 본질적으로 아무 작업도 수행하지 않고 보호를 제공하지 않는 두 가지 구현과 java.util.concurrent.Semaphore에 위임하는 다른 클래스를 제공하십시오.이 시점부터 종속성 주입을 사용하여 어떤 구현을 사용할 것인가.

다시 말하지만, 분기는 필연적으로 어딘가에서 살아야합니다. 이것은 비즈니스 로직을 위와 바깥으로 옮깁니다.

+0

자세한 내용은 내 질문을 편집했습니다. 달성하기를 원하는 제약 조건. – djechlin

+0

당신의 질문에 대한 Perception의 코멘트가 아마도 가장 합리적인 대답 일 것이라고 말할 수 있습니다. 리소스 가드를 제공하지 않는 방식으로 동작 할 수있는 세마포를 효과적으로 사용하고 싶습니다.이 특정 사용 사례에 대해 "널리 사용 가능한 솔루션"이 될 가능성은 없습니다. 행복한 사냥! –