JavaTM Platform
Standard Ed. 6

java.util.concurrent.locks
인터페이스 ReadWriteLock

기존의 구현 클래스의 일람:
ReentrantReadWriteLock


public interface ReadWriteLock

ReadWriteLock 는, 읽기 전용 조작용 및 기입해 용무의, 관련하는 의 페어를 제어합니다. read 락 은, 라이터가 존재하지 않는 한, 복수의 리더 thread를 동시에 보관 유지할 수 있습니다. 기입 락 은 배타적입니다.

모든 ReadWriteLock 구현으로, 관련지을 수 있었던 readLock 에 대한 writeLock 조작의 메모리 동기 효과 (Lock 인터페이스로 지정)도 보관 유지하는 것을 보증할 필요가 있습니다. 즉, 정상적으로 읽어들여 락을 취득한 thread에서는, 기입 락이 전회 해제되었을 때에 행해진 모든 갱신 내용을 인식합니다.

읽어들여 - 기입 락을 사용하면(자), 상호 배타 락을 사용하는 경우보다 광범위한 병행성을 공유 데이터에의 액세스에 갖게할 수가 있습니다. 이 락은, 공유 데이터를 한 번으로 변경할 수 있는 것은 단일의 thread ( 「라이터」thread) 뿐인 것, 및 많은 경우, 임의수의 thread ( 「리더」thread)가 데이터를 병행해 읽어들일 수가 있다고 하는 사실을 이용합니다. 이론상은, 읽어들여 - 기입 락의 사용으로 허가되는 병행성을 향상시키면(자), 상호 배타 락을 사용하는 경우와 비교해 퍼포먼스가 향상합니다. 실제로는, 병행성 향상이 충분히 실현되는 것은, 복수의 프로세서상에서 사용되어 공유 데이터의 액세스 패턴이 적합한 경우만입니다.

읽기-기입 락에 의해 상호 배타 락보다 퍼포먼스가 향상할지 어떨지는, 데이터 변경에 대한 데이터 읽을 빈도, 읽기 및 기입의 지속 기간, 및 데이터의 경합, 즉 동시에 데이터를 읽어내는 또는 기입하는 thread의 수에 의존합니다. 예를 들어, 데이터가 넣을 수 있던 뒤, 너무 변경되는 일 없이 (디렉토리등이) 빈번하게 검색되는 컬렉션은, 읽기-기입 락의 이상적인 후보가 됩니다. 다만, 갱신이 빈번하게 행해지는 경우, 데이터의 시간의 대부분은 배타적 락에 소비되기 (위해)때문에, 병행성은 향상한다고 해도 매우 정확히 알 수 없는 것입니다. 게다가 읽어들여 조작의 시간이 너무 짧으면(자), 읽기-기입 락의 구현에 의한 오버헤드 (본래, 상호 배타 락보다 복잡)에 의해 실행 코스트가 지배되어 버릴 가능성이 있습니다. 다수의 읽기-기입 락 구현이 적은 코드 섹션으로 모든 thread를 직렬화하는 경우는, 특히 이것이 들어맞읍니다. 결국, read-기입 락이 사용하는 어플리케이션에 적절하고 있는지 어떤지를 조사하려면 , 프로 파일링과 계측을 실행할 수 밖에 없습니다. read-기입 락의 기본 조작은 복잡하지는 않습니다만, 구현으로 실시할 필요가 있는 정책상의 결정이 다수 존재합니다.

이러한 결정은, 지정된 어플리케이션에서의 읽어들여-기입 락의 효과성에 영향을 주는 경우가 있습니다. 이러한 정책의 예를, 다음에 나타냅니다.

지정된 어플리케이션 구현의 적성을 평가할 때, 이것들 모든 것을 고려할 필요가 있습니다.

도입된 버젼:
1.5
관련 항목:
ReentrantReadWriteLock , Lock , ReentrantLock

메소드의 개요
 Lock readLock ()
          읽어들여에 사용하는 락을 돌려줍니다.
 Lock writeLock ()
          기입해에 사용하는 락을 돌려줍니다.
 

메소드의 상세

readLock

Lock  readLock()
읽어들여에 사용하는 락을 돌려줍니다.

반환값:
읽어들여에 사용하는 락

writeLock

Lock  writeLock()
기입해에 사용하는 락을 돌려줍니다.

반환값:
기입해에 사용하는 락

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.