Java의 Filelock을 사용할 때는 닫기 ()를 자동으로 잠금 장치를 수행하도록 허용해도 괜찮습니까? Release ()?

StackOverflow https://stackoverflow.com/questions/421833

  •  05-07-2019
  •  | 
  •  

문제

대부분이 알아야 할 것처럼 close() 또한 스트림이 사용하는 모든 스트림을 닫습니다.

이것은 다음 코드를 허용합니다.

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();

참조가 필요하지 않기 때문에 이것은 좋습니다. FileInputStream 그리고 그것을 닫아야합니다.

그러나 그것은 또한 효과적입니다 FileLock에스?

final FileInputStream fis = new FileInputStream(new File("buffer.txt"));
final FileChannel c = fis.getChannel();
final FileLock lock = c.lock(0L, Long.MAX_VALUE, true);
final BufferedReader br = new BufferedReader(new InputStreamReader(fis));

try {
    while(br.ready()) {
        System.out.println(br.readLine());
    }
} finally {
    br.close();
}

이 코드를 시도했는데 잠금 장치가 올바르게 릴리스됩니다. br.close() 호출되었지만 그렇게하기에 안전합니까? 그만큼 폐쇄 가능한 Javadoc 말한다. "이 스트림을 닫고 관련된 시스템 리소스를 출시합니다." 내가 사용하고 있다고 가정하는 것이 안전합니다 close() 지정된대로 release() 자물쇠?

도움이 되었습니까?

해결책

에 따르면 Javadoc:

릴리스 방법을 호출하거나 획득하는 데 사용 된 채널을 닫거나 Java Virtual Machine의 종료에 의해 잠금이 해제 될 때까지 유효합니다.

그리고 여기에 내용이 있습니다 FileInputStream.close()

public void close() throws IOException {
    if (channel != null)
        channel.close();
    close0();
}

보입니다 close 스트림에서 잠금 장치를 출시하는 채널을 닫습니다.

다른 팁

예.

잠금 장치는 파일 디스크립터에 따라 다릅니다. 프로세스에 파일을 나타내는 파일 디스크립터가 없으면 이와 관련된 잠금 장치가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top