2012-02-14 2 views
2

다음과 같이 내가 파일 잠금 및 잠금 해제 방법을 가지고자바 - 파일 공유 파일 잠금 문제

잠금 방법,

fileLock = fileChannel.tryLock(); 

if (fileLock != null) 
System.out.println("File is locked"); 

잠금 해제 방법,

fileLock.release(); 

지금,이 두 가지 방법이 있습니다 두 개의 동시 프로세스에 의해 액세스됩니다. 이제 잠금 해제 전에 하나의 프로세스가 충돌하는 경우 JVM이 닫힐 때까지 다른 프로세스가 파일에 액세스 할 수 없습니다. 아무도 나를 도울 수 있습니까, 가능한지 (그리고 어떻게) 파일을 잠그기위한 시간 제한을 지정하는 것입니까?

+0

'try {...} catch() {...}'다음에'release()'호출이'finally' 블록으로 묶여 있습니까? 왜 스레드 중 하나가 자동으로 충돌합니까? 한 가지 더 묻습니다. 당신은 말 : 다른 프로세스, 즉 다른 자바 스레드 또는 정말 다른 OS 프로세스를 의미합니다. – Grooveek

+0

@Arpssss : "프로세스"란 "스레드"를 의미합니까? 프로세스가 충돌하면 JVM이 종료되었음을 의미합니다. 나는 당신의''fileLock.release()''가''finally'' 블록에 들어가야 할 수도 있다고 생각합니다. – Ash

+0

@Ash, 아니, 마침내. 그러나 간단히하기 위해 나는 그것을 적어 두지 않았다. 그리고 스레드가 아니라 프로세스가 있습니다. 감사합니다. – Arpssss

답변

0

싱글 톤 패턴을 사용하십시오. 그런 다음 하나의 스레드 만 파일에 액세스합니다.

+1

-1. 무의미한. 대답이 아닙니다. OP가 여러 프로세스에 대해 이야기하고 있습니다. * – EJP

+0

죄송합니다. 분명히이 문제를 올바르게 이해하지 못했습니다. – alnasfire