JavaTM Platform
Standard Ed. 6

java.nio.channels
클래스 FileLock

java.lang.Object 
  상위를 확장 java.nio.channels.FileLock


public abstract class FileLock
extends Object

파일 영역상의 락을 나타내는 토큰입니다.

FileChannel 클래스의 lock 메소드나 tryLock 메소드를 사용해 파일상에 락을 획득하면(자), 그때마다 파일 락 객체가 작성됩니다.

파일 락 객체는 최초부터 유효하고,release 메소드의 호출해, 락의 획득에 사용한 채널의 클로즈, Java 가상 머신의 종료등에 의해 해제될 때까지, 그 상태를 보관 유지합니다. 락의 유효성은,isValid 메소드를 호출하는 것에 의해 확인할 수 있습니다.

파일 락에는 「배타 락」과「공유 락」이 있습니다. 공유 락의 경우, 병행해 실행되고 있는 그 외의 프로그램은, 오버랩 하는 배타 락을 획득할 수 없습니다. 오버랩 하는 공유 락이면 획득 가능합니다. 한편, 배타 락의 경우, 어느 쪽의 종류의 락도 획득할 수 없습니다. 락을 해제하면(자), 그 외의 프로그램에 의해 획득되는 락에의 영향은 없어집니다.

배타 락일까 공유 락일까는,isShared 메소드를 호출하는 것으로 판단할 수 있습니다. 공유 락을 지원하지 않는 플랫폼에서는, 공유 락 요구가 자동적으로 배타 락 요구에 변환됩니다.

단일의 Java 가상 머신에 의해 특정의 파일상에 보관 유지되고 있는 락은, 오버랩 하지 않습니다. 후보가 되는 락의 범위가 기존의 락과 오버랩 할지 어떨지는,overlaps 메소드로 확인할 수 있습니다.

파일 락 객체는, 락을 보관 유지하고 있는 파일, 락의 종류와 유효성, 락 된 영역의 위치와 사이즈에 관한 파일 채널 정보를 기록합니다. 시간의 경과와 함께 변화하는 것은, 락의 유효성 뿐입니다. 그 외의 락 상태는 불변입니다.

파일 락은 Java 가상 머신 전체를 위해서(때문에) 보관 유지됩니다. 이것들은, 동일 가상 머신내의 복수 thread에 의한 파일에의 액세스를 제어하는데는 적합하지 않습니다.

파일 락 객체는, 복수의 병행 thread로 안전하게 사용할 수 있습니다.

플랫폼의 의존성

이 파일 락 API 는, 기초에 있는 operating system의 네이티브의 락 기능에 직접 매핑 됩니다. 이 때문에, 파일에 액세스 할 수 있는 모든 프로그램이, 작성에 사용된 언어와는 관계없이, 이 파일상에 보관 유지된 락을 인식합니다.

락 된 영역의 컨텐츠에 그 외의 프로그램으로부터 액세스 할 수 없게 될지 어떨지는, 시스템에 의해 정해지기 (위해)때문에 미지정입니다. 네이티브의 파일 락으로서 「아드바이자리록크」 밖에 지원하지 않는 시스템도 있습니다. 이러한 시스템에서는, 데이터의 무결성을 보증하기 위해(때문에), 프로그램을 사용해 기존의 락 프로토콜을 감시할 필요가 있습니다. 한편, 네이티브의 파일 락이 「필수 락」이라고 하는 시스템도 있습니다. 이 경우, 어느 프로그램에 의해 파일 영역이 락 되고 있을 때, 그 외의 프로그램으로부터 락을 찢어 액세스 할 수 없습니다. 이 외 , 네이티브의 파일 락을 아드바이자리록크로 할까 필수 락으로 할까를 파일 단위로 선택할 수 있는 시스템도 있습니다. 플랫폼간의 동작의 일관성과 정확성을 확보하기 위해서는, 이 API 의 제공하는 락을 아드바이자리록크로서 사용하는 것을 강하게 추천합니다.

시스템에 따라서는, 파일 영역상에서 필수 락을 획득하면(자), 그 파일 영역을메모리에 맵 할 수 없게 되거나 반대로 메모리를 파일 영역에 맵 할 수 없게 되거나 하는 경우가 있습니다. 락과 매핑의 양쪽 모두를 조합해 사용하는 프로그램에서는, 이 편성이 실패하는 것에 준비해 둘 필요가 있습니다.

시스템에 따라서는, 채널을 클로즈 하면(자), 기초에 있는 파일상에서 Java 가상 머신에 의해 보관 유지되고 있던 락이, 그 채널로부터 획득했는지, 또는 같은 파일상에서 오픈하고 있는 다른 채널로부터 획득했는지를 관계없이, 모두 해제되는 경우가 있습니다. 단일의 프로그램내에서는, 어느 특정의 파일상의 모든 락을 일의의 채널로 획득하는 것을 강하게 추천합니다.

일부의 네트워크 파일 시스템에서는, 락 된 영역이 페이지형으로, 기초에 있는 하드웨어의 페이지 사이즈의 완전 배수인 경우에 한정해, 파일 락을 메모리 맵으로 사용할 수가 있습니다. 또 다른 네트워크 파일 시스템에서는, 특정의 위부터 위 (일반적으로 230 또는 231)의 영역상의 파일 락이 구현되지 않습니다. 일반적으로, 네트워크 파일 시스템상의 파일을 잠글 때는, 세심의 주위를 기울일 필요가 있습니다.

도입된 버젼:
1.4

생성자 의 개요
protected FileLock (FileChannel  channel, long position, long size, boolean shared)
          이 클래스의 새로운 인스턴스를 초기화합니다.
 
메소드의 개요
 FileChannel channel ()
          이 락이 보관 유지되고 있는 파일을 가지는 파일 채널을 돌려줍니다.
 boolean isShared ()
          이 락이 공유 락일지 어떨지를 판단합니다.
abstract  boolean isValid ()
          이 락이 유효한지 어떤지를 판단합니다.
 boolean overlaps (long position, long size)
          이 락이 지정된 락 범위와 오버랩 하고 있을지 어떨지를 판단합니다.
 long position ()
          파일내의 락 된 영역의 최초의 바이트의 위치를 돌려줍니다.
abstract  void release ()
          이 락을 해제합니다.
 long size ()
          락 된 영역의 사이즈를 바이트로 돌려줍니다.
 String toString ()
          이 락의 범위, 종류, 유효성을 설명하는 캐릭터 라인을 돌려줍니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , wait , wait , wait
 

생성자 의 상세

FileLock

protected FileLock(FileChannel  channel,
                   long position,
                   long size,
                   boolean shared)
이 클래스의 새로운 인스턴스를 초기화합니다.

파라미터:
channel - 이 락이 보관 유지되고 있는 파일을 가지는 파일 채널
position - 파일내의 락 된 영역의 개시 위치. 부가 아닌
size - 락 영역의 사이즈. 부가 아니다. position + size 의 합계도 부가 아닌
shared - 이 락이 공유 락의 경우 true, 배타 락의 경우 false
예외:
IllegalArgumentException - 상기의 파라미터의 전제 조건이 채워지지 않은 경우
메소드의 상세

channel

public final FileChannel  channel()
이 락이 보관 유지되고 있는 파일을 가지는 파일 채널을 돌려줍니다.

반환값:
파일 채널

position

public final long position()
파일내의 락 된 영역의 최초의 바이트의 위치를 돌려줍니다.

락 된 영역이 기초에 있는 파일에 포함되어 있거나, 오버랩 하거나 하고 있을 필요는 없습니다. 이 메소드는, 현재의 파일 사이즈 이상의 값을 돌려주는 일이 있습니다.

반환값:
위치

size

public final long size()
락 된 영역의 사이즈를 바이트로 돌려줍니다.

락 된 영역이 기초에 있는 파일에 포함되어 있거나, 오버랩 하거나 하고 있을 필요는 없습니다. 이 메소드는, 현재의 파일 사이즈 이상의 값을 돌려주는 일이 있습니다.

반환값:
락 된 영역의 사이즈

isShared

public final boolean isShared()
이 락이 공유 락일지 어떨지를 판단합니다.

반환값:
공유 락의 경우 true, 배타 락의 경우 false

overlaps

public final boolean overlaps(long position,
                              long size)
이 락이 지정된 락 범위와 오버랩 하고 있을지 어떨지를 판단합니다.

반환값:
이 락과 지정된 락 범위가 1 바이트 이상 오버랩 하고 있는 경우에 한해 true

isValid

public abstract boolean isValid()
이 락이 유효한지 어떤지를 판단합니다.

락 객체는, 락이 해제되는지, 관련한 파일 채널이 클로즈 될 때까지 유효합니다.

반환값:
이 락이 유효한 경우에 한해 true

release

public abstract void release()
                      throws IOException 
이 락을 해제합니다.

이 메소드를 호출하면(자), 락 객체가 유효하면 락이 해제되어 무효가 됩니다. 락 객체가 무효인들 변화는 없습니다.

예외:
ClosedChannelException - 이 락의 획득에 사용한 채널이 오픈하고 있지 않는 경우
IOException - 입출력 에러가 발생했을 경우

toString

public final String  toString()
이 락의 범위, 종류, 유효성을 설명하는 캐릭터 라인을 돌려줍니다.

오버라이드(override):
클래스 Object 내의 toString
반환값:
설명문자열

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 도 참조해 주세요.