2つの異なるテキストファイルに書き込む必要のあるスレッドがいくつかあります。これまでのところ、私はこのコードを持っています:
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");
}
}
}
これは、同時に1つのスレッドだけが同じファイルに書き込んでいることを確認するための許容可能な方法ですか?
スレッドがこれらのメソッドの1つを呼び出して同期ブロックに入ると、別のスレッドがやって来て同じメソッドを実行しようとするとどうなりますか。ローカル変数を使用しようwriter
とすると、他のスレッドによってロックされているためにブロックされているのと同じオブジェクトを取得しようとしますか?私はそれが単にそれ自身の別個の変数を作成するだろうと思ったでしょう、それは私が代わりにライターを静的クラス変数にするべきであることを意味しますか?