파일 잠금 기능
서로 다른 프로세스나 쓰레드에 의한 파일 접근을 막기 위해 전체 혹은 특정 부분을 잠금 것
lock 종류
- lock 설명
- mandatory lock - 필수 잠금
- advisory lock - 권고 잠금
- 다른 스레드가 객체의 필드를 수정하지 것을 막지 못하며, 단지 락을
획득하지 못하게 함 - 파일 잠금 기능
- 배타적 잠금 : synchronized 키워드와 비슷, 다른 스레드가 유사한 락을 얻지 못하게 함
- 쓰기 작업 시
- 공유 잠금 : 잠금을 얻을 수 있으나 배타적 잠금은 얻지 못함
- 읽기 작업 시
lock 이용
- 파일 전체 잠금
- 파일 부분 잠금
- OverlappingFileLockException 발생하는 경우
- 동일한 JVM 에서 배타적 잠금 덮어쓰는 경우
- 배타적인 잠금과 공유 잠금이 겹치게 생성하려는 경우
- 특정 OS에서는 공유 잠금을 지원 하지 않음
- java.nio.channels.FileLock.isShared() : 잠금 유형 확인
- true : 공유 잠금
- false : 배타적 잠금
lock 획득
- FileChannel 객체에 생성
- 두 가지 획득 방법
- FileChannel.lock()
- lock이 획득될 때 까지 블록킹
- FileChannel.tryLock()
- lock이 곧바로 획득되지 않는 경우에 null을 리턴
- lock 파라미터 설명
- FileChannel.lock(long position, long size, boolean shared) :
- position - 시작 위치 (바이트 단위)
- size - 길이 (바이트 단위)
- shared - true : 공유 , false : 배타적
FileOutputStream fo = new FileOutputStream("test.txt");
FileChannel fc = fo.getChannel();
FileLock fl = fc.lock(); //방법1 - 전체 잠금
FileLock fl = fc.lock(0L,Long.MAX_VALUE ,false); //전체 잠금 요청
- 해지 방법 ( 두 가지)
- java.nio.channels.FileLock.relase() 사용
- FileChannel 을 종료
휴대성 (호환성)에 고려
- 파일 락은 OS에 구현에 따라 종속 적인
- 다양한 OS을 만족 시키는 방법
- 배타적 잠금을 사용
- 모든 잠금을 advisory(권고)로 취급
- 잠금은 동일한 프로세스 내의 쓰레드들에 의해 영향을 받는다.
출처 : 인포북 JDK 1.4 Tutorial
댓글 없음:
댓글 쓰기