我有几个线程需要写入两个不同的文本文件。到目前为止,我有这个代码:
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");
}
}
}
这是确保不超过一个线程同时写入同一个文件的一种可接受的方式吗?
如果一个线程调用这些方法之一并进入同步块,那么如果另一个线程出现并尝试执行相同的方法会发生什么。当它尝试使用局部变量writer
时,它是否会尝试获取已被另一个线程锁定的相同对象并因此阻塞?我原以为它会简单地创建自己的单独变量,这意味着我应该让 writer 成为静态类变量?