2014-11-18 8 views
0

함수 a(), b(), c()가 있습니다. 그리고 b()와 c() 실행을 동기화하려고하지만 b()와 c()를 동기화하지 않으려 고합니다 (b()와 c()() 및 b() 병렬 실행 또는 a() 및 c() 병렬 실행은 불가능합니다. Java에서이 문제를 해결할 수 있습니까?한 기능을 다른 기능과 동기화하지만 다른 기능을 동기화하지 않는 방법은 무엇입니까?

+5

당신은'ReadWriteLock'을 찾고 있습니다. –

+1

@MarkoTopolnik 간단한 잠금 장치가 아닌 이유는 무엇입니까? – fge

+1

@fge 간단한 잠금 장치로 어떻게 비대칭 성을 달성 할 수 있습니까? –

답변

3

당신 같은이 작업을 수행 할 수 있습니다 물론

private final ReadWriteLock rwlock = new ReentrantReadWriteLock(); 

void a() { 
    rwlock.writeLock().lock(); 
    try { whatever(); } finally { rwlock.writeLock().unlock(); } 
} 

void b() { 
    rwlock.readLock().lock(); 
    try { whatever(); } finally { rwlock.readLock().unlock(); } 
} 

void c() { 
    // same as b() 
} 

이이이 아닌 경우 모두 세 가지 방법 등 클래스 당이 락의 인스턴스가 있는지, 같은 클래스에 있다고 가정한다 정확한 사용 사례에 따라 가시성/선언/등을 조정하십시오.

+0

고마워요! 그것은 내가 필요한 것입니다! –

+0

이 경우 응답을 수락 할 수 있습니다. –

관련 문제