두 개의 다른 텍스트 파일에 쓰는 데 필요한 여러 스레드가 있습니다.정적 클래스에서 파일 출력 동기화
public class Logger {
public static void printToGameLog(String value){
Writer writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("GameLog.txt", true), "utf-8"));
synchronized(writer){
writer.write(outputString + "\r\n");
}
} catch (IOException ex){
System.out.println("cannot create log file");
}
}
public static void printToServerLog(String value){
Writer writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("serverLog.txt", true), "utf-8"));
synchronized(writer){
writer.write(outputString + "\r\n");
}
} catch (IOException ex){
System.out.println("cannot create log file");
}
}
}
이 동시에 같은 파일에 쓰기 작업을 수행하는 하나 개의 스레드가 아닌 더 이상 보장하지의 수용 방법입니다 지금까지 나는이 코드를 가지고?
스레드가 이러한 메서드 중 하나를 호출하고 sync 블록을 호출하면 다른 스레드가 함께오고 동일한 메서드를 실행하려고하면 어떻게됩니까? 로컬 변수 writer
을 사용하려고하면 다른 스레드에 의해 잠겨져 같은 블록을 잠그려고 시도 할 것인가? 나는 단순히 그것의 자신의 분리 된 변수를 만들 것이라고 생각했을 것이다. 그것은 작가에게 대신 정적 클래스 변수를 만들어야한다는 것을 의미 할까? 코드에서 널 포인터 예외입니다
2 개의 다른 파일에 쓰고 있다면 동기화 할 필요가 없습니다. – user845279
''\ r \ n "'-''\ n"'만을 사용하고 런타임이 플랫폼의 올바른 줄 끝을 쓰게하십시오. –
GameLog 및 ServerLog 출력을 조정하거나 단일 출력 줄에서 두 스레드가 인터리빙하지 못하도록하려면 어떻게해야합니까? –