2014-05-21 15 views
0

나는 다음과 같은 코드, 그것은 다중 스레드 서버 코드의 일부이다이 : 내가 자바에서 "동기화"에 대해 읽은동기화 JAVA - 파일 잠금

File ff=new File("../key.txt"); 
     if(ff.exists()) 
     { 
      try(
       BufferedReader br = new BufferedReader(new FileReader("..\key.txt"))) { 



       for(String line2; (line2 = br.readLine()) != null;) { 


        System.out.println("WE ARE READING 'KEY' "); 
        String a[]=line2.split("-"); 
        k[i2]=a[0]; 
        od[i2]=a[1]; 
        ed[i2]=a[2]; 
        System.out.println("key: "+k[i2]+" OD: "+od[i2]+" ED: "+ed[i2]); 
                     } 
                       } 
     } 

하지만 난 방법을 생각하지 않았다 그것을 내 코드에 통합하면, 사용자가 그것을 사용할 때마다 "키"파일을 잠그고 싶습니다. 다른 사용자가 이미 보안상의 이유로 그것을 사용하고 있다면, 다른 사용자가 동시에 액세스 할 수 없습니다.

+1

Offtopic :'FF' 변수는'ff'라고해야합니다. 관례에 따라 변수와 메소드는 소문자로 시작하고 클래스 또는 인터페이스는 대문자로 시작합니다. 동일한 경로를 두 번 입력하는 대신'ff' 변수를 사용하여'FileReader'를 생성 할 수 있습니다. – aalku

+0

@ user270349 알다시피 그 테스트 코드 – Zame

+0

이 경우에는 파일 잠금이 필요하며 동기화가 필요하지 않습니다 (스택 오버플로에서 Java 파일 잠금을 검색하면 많은 예제가 제공됩니다). 그러나 더 나은 질문은 한 서버 내의 여러 사용자가 동일한 파일을 공유하는 이유입니다. 그건 나쁜 생각이야. 대신 세션 특정 파일을 사용해보십시오 (File.createTmpFile 등 참조). – user1676075

답변

1

파일이 다른 곳에서 사용되지 않지만이 코드는 그냥 블록 동기화 할 수있는 경우 : 파일이 코드의 여러 부분 사이에 공유되는 경우에 일정한 모니터를 사용할 수 있습니다

synchronized { 
    File ff=new File("../key.txt"); 
    if(ff.exists()) { 
     BufferedReader br = new BufferedReader(new FileReader(ff))) { 
     try(
      // YOUR STUFF WITH br HERE 
     } finally { 
      br.close(); 
     } 

    } 
} 

을 동기화 (synchronized (MY_MONITOR_OBJECT) {...})하거나 잠금 장치 (doc here)를 사용하십시오.

+0

지금까지 파일 잠금이 작동 중입니다. 감사합니다. – Zame