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個以下のスレッドが同時に同じファイルに書き込んでいる確保の許容可能な方法は何ですか?
スレッドがこれらのメソッドのいずれかを呼び出してsyncブロックに入ると、別のスレッドが来て同じメソッドを実行しようとするとどうなりますか?ローカル変数writer
を使用しようとすると、他のスレッドによってロックされた同じオブジェクトが取得され、ブロックされますか?私はそれが単なる独自の別の変数を作成すると思っていたでしょう。これは、代わりに静的なクラス変数を作者にしなければならないということでしょうか?あなたのコード内でnullポインタ例外だ
2つの異なるファイルに書き込む場合は、同期する必要はありません。 – user845279
'' \ r \ n "' - '' \ n "'のみを使用して、ランタイムにプラットフォームの正しい行末を書き込ませます。 –
GameLogとServerLogの両方に出力を調整する目的はありますか、または単に2つのスレッドが1つの出力行内でインターリーブするのを防ぐためですか? –