2010-05-20 6 views
1

가 나는 OverlappingFileLockException을 던질 수있는 javadoc의 당으로 FileChannel 객체에Java에서 RandomAccessFile에 액세스하는 동안 FileChannel에서 FileLock을 가져 오는 보장 된 방법은 무엇입니까?

FileLock lock(long position, long size,boolean shared) 

를 사용하는 것을 시도하고있다. 내가 2 스레드를 사용하여 테스트 프로그램을 만들 때 잠금 메서드는 잠금을 획득하기 위해 대기 중일 것입니다 (독점 및 비 독점 모두) 그러나 래핑 파일 잠금 예외를 넘어서서 숫자 스레드가 증가하면 블록 때문에 처리 속도가 느려집니다 파일 잠금 테이블에서.

OverlappingFileLockException을 피하기 위해 잠금을 획득하는 가장 좋은 방법은 무엇입니까?

답변

0

지역이 겹치지 않게하십시오. shared 플래그를 true으로 설정할 수도 있습니다. 하지만 공유 잠금은 운영 체제에 따라 다릅니다. 따라서 모든 시스템에서 사용 가능하지 않을 수 있습니다.

+0

공유 플래그는 읽는 동안 true로 설정할 수 있지만 쓰는 동안 배타적 잠금이어야합니다. 따라서 공유는 거짓이어야합니다. 이 경우 읽기 및 쓰기가 모두 수행됩니다. – nbhat