2011-08-19 2 views
0

reentrantReadWriteLock을 적용 할 때 잠긴 경우 이미 다른 블록을 수행하는 동안 다른 스레드가 잠금에 액세스하면 어떻게됩니까? (따라서 .unlock에 도달하기 전에)여러 스레드가 ReentrantReadWriteLock에 액세스하려고하면 어떻게됩니까?

메서드가 취소 되었습니까? 아니면 멈춘 것일까 요? : O

+0

잠금 장치의 전체적인 점은 원래의 잠금 장치가 잠금 해제되기 전에 다른 누군가가 잠금을 시도하면 잠금 해제 될 때까지 잠금이 해제된다는 것입니다. 그런 식으로 스레드에게 잠금 기능, 잠금 기능, 잠금 해제 기능을 제공합니다. – corsiKa

답변

1

잠금을 사용할 수있을 때까지 스레드가 차단됩니다. 만 사용 가능한 경우 잠금을 획득하려면 (docs)

, 당신은 스레드가 차단됩니다 tryLock()

1

사용할 수 있습니다. 복수의 thread가이 락을 취득하려고하면 (자), 그 모두가 블록됩니다. 잠금이 해제되면 대기 풀의 하나의 스레드 만 잠금을 획득하고 나머지는 여전히 대기합니다. 공정한 잠금과 불공정 한 잠금 사이의 difference을 참조하십시오.

0

차단하지 않으려면 Lock.tryLock() (대기하지 않고 시도 함) 또는 tryLock(long time, TimeUnit unit)을 사용할 수 있습니다. 지정하지 않는 한 대기합니다.

1

ReentrantReadWriteLock에 대해 이야기 했으므로,이 동작은 ReadWriteLock과 관련된 읽기 잠금 또는 쓰기 잠금 중 무엇을 사용하는지에 따라 달라집니다. 당신이 쓰기 잠금을 획득하려는 경우

  1. , 당신은 당신이를 취득하려는 경우 모든 소유자는
  2. (는 읽기 잠금 또는 쓰기 잠금 여부) 잠금을 해제 할 때까지 차단됩니다 읽기 잠금 및 쓰기 잠금 보유자가없는 경우 다른 읽기 잠금 보유자가 있더라도 항상 을 획득 할 수 있습니다.
  3. 읽기 잠금을 얻으려고하고 쓰기 잠금이 해제 될 때까지 차단됩니다.

라이터가없는 한 읽기 잠금은 여러 스레드에서 동시에 유지할 수 있습니다.

관련 문제