2014-01-14 3 views
-2

나는 여러 스레드의 작은 프로그램을 작성하고 있으며 상호 배타를 적용하기 위해 세마포를 사용하고 있습니다. 그러나 문제는 내 머리를 촉발시킵니다.스레드가 획득하기 전에 호출하기

Semaphore.acquire보다 먼저 호출되면 어떻게됩니까?

광산이 정상적으로 작동합니다. 그것을하는 것은 나쁜 연습 또는 OK입니까?

+0

"Lock"에 그런 메소드가 없기 때문에, 나는 당신이 완전히 다른 것, 예를 들어 "Semaphore"에 대해서 이야기하고 있다고 생각할 것입니다. 그리고 저는 여러분이이 질문을하는 경우 실제로 그것이 무엇인지 이해하지 못한다고 가정하고 있습니다. –

+0

(자물쇠를 사용하고 javadocs를 읽으십시오). –

답변

1

나는 모니터 원리에 대해 이야기하고 있다고 생각합니다. 이것은 많은 스레드 또는 프로세스와 공유되는 메모리의 데이터에 액세스하는 동안 교착 상태를 피하는 데 사용됩니다.

이렇게하는 경우 Java의 동기화 된 블록에 대해 알려주십시오. 이렇게하면 다른 스레드가 자신의 메서드 본문에서 동기화 된 블록을 보유하고있는 스레드와 동시에이 객체에 액세스 할 수 없게됩니다. 다른 사용자가 동기화 된 블록에있는 동안이 데이터에 액세스하려는 경우 다른 사용자는 현재 작업자 스레드가 관련 개체/데이터에이 상태를 유지할 때까지 기다려야합니다.