나는 자바 파일 잠금에 대한 약간의 혼란이있다.자바가 동시에 스레드간에 파일을 액세스
여기가 내 상황입니다.
- 각 스레드는 파일을 읽고 쓸 수 있습니다.
- 내 파일을 조작하는 방법은 스레드로 파일에는 동시 쓰기, 내 목표는 분명하다, 동시에
및 여러 스레드에서 호출 할 수 없습니다. 항상 하나의 스레드가 파일을 쓸 수 있습니다.
내 질문 있습니다
FileOutputStream.write()는 스레드 안전하다고, 내가 잠긴까지 차단됩니다) 쓰기 (의 코드 때문에 내 코드에서 동시성 메커니즘을 넣어하지 않았다 파일이 공개됩니다. 그러나 스레드가 파일을 열 때 내 프로그램이 차단되지 않는 것 같습니다 (이 문제는 확실하지 않습니다)
FileOutputStream.write()가 스레드로부터 안전하지 않은 경우, 추가 코드를 작성해야합니다. 한 번에 스레드 만 액세스하는 파일 따라서 FileChannel.lock()을 사용했습니다. 그러나 JDK 문서와 다른 점은 차단하지 않고 OverlappingFileLockException을 던집니다.
귀하의 명확한 조언을 부탁드립니다.
FWIW FileChannel # lock은 다른 프로세스를 잠그는 것입니다 * 같은 JVM의 스레드간에 동기화하지 않기 위해 : http://stackoverflow.com/questions/128038/how-can-i-lock-a-file-using -java-if-possible – Thilo
참조 해 주셔서 감사합니다. 그래서 .. FileChannel.lock()은 스레드가 아닌 프로세스에서만 유효합니까? 그리고 나는 정말로 동기화 접근법을 사용해야합니다 ... 맞습니까? –