참고 : 파일 잠금 및 잠금 해제 방법에 대한 다른 게시물을 읽었습니다. 나는 내가 모르는 특별한 것을 발견하지 못했다. 그래서 누군가가 제안을 할 수 있도록 시나리오를 작성하려고합니다.따라서 파일 잠금 및 업데이트
내 경험상 FileChannel.lock은 jvm의 여러 인스턴스에서 다른 Object가 파일을 잠그고 업데이트하려고 할 때 File의 잠금 및 잠금 해제 상황을 보장하지 않습니다.
내 응용 프로그램의 시나리오는 다음과 같습니다 - 파일을 업데이트하는 세 개의 별도 프로그램이 있습니다. 이러한 프로그램은 다른 jvm 인스턴스에서 실행됩니다. 프로그램이 A, B 및 C이고 파일이 F라고 가정 해보십시오. A가 파일 F를 잠근 경우 B와 C는 다른 프로그램 중 하나가 보류 상태가되기 전에 F가 해제 될 때까지 기다려야합니다. 프로그램이 동일한 jvm 인스턴스에서 실행되는 경우이 작업은 정상적으로 작동합니다. 불행히도 이것은 여러 개의 jvm 인스턴스에서 작동하지 않습니다.
나는 F가 업데이트되어야 하는지를 나타내는 플랫 파일을 가지고 있다는 또 다른 아이디어가있었습니다. 해당 플랫 파일의 내용은 LOCKED 또는 UNLOCKED 일 수 있습니다. 기본값/초기 값은 UNLOCKED입니다. 따라서 프로그램 중 하나가 F를 업데이트하려는 경우 플랫 파일에서 플래그를 확인해야합니다. 플래그가 LOCKED를 읽으면 기다려야합니다. 이 접근법에는 문제가 있습니다 - 여러 프로그램이 정확히 동시에 플랫 파일을 열고 "UNLOCKED"또는 플랫 파일을 읽으려고 기다리고 있던 두 개의 프로그램이 UNLOCKED이고 정확하게 동시에 파일이 " UNLOCKED "?
아무 생각 없나요?
Lucene의 org.apache.lucene.store.Lock 구현 (예 : SimpleFSLock 및 NativeFSLock)을 본 적이 있습니까? 그 수업은 똑같은 목적으로 만들어 지므로, 거기에서 몇 가지 아이디어를 얻을 수 있습니다. – sfussenegger
소리가 멋지다. 나는 한번 살펴볼 것이다. 대단히 감사합니다. – DragonBorn