nul*_*ull 5 java static synchronized filewriter bufferedwriter
我正在研究Webmethods Integration Server.里面有一个java服务,它是一个静态java方法,用于通过使用BufferedWriter和FileWriter将数据写入日志文件(server.log).静态方法代码是这样的:
public static void writeLogFile(String message) throws ServiceException{
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("./logs/server.log", true));
bw.write(message);
bw.newLine();
bw.close();
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
- 代码已经过简化,仅用于示例目的.
-I无法更改writeLogFile方法声明和属性.这意味着,它将永远是:public static void writeLogFile.禁止这种修改:public synchronized void writeLogFile.
writeLogFile方法有可能被不同的实例调用,因此我需要确保没有两个或更多实例同时访问相同的资源(server.log).这意味着,如果有两个实例尝试访问server.log,则其中一个实例必须等待另一个实例才能完成将数据写入server.log.
问题是:我应该更改上面的代码吗?如果是这样,我需要做哪种修改?我应该在java静态方法中实现"synchronized"吗?
@EJP:
那么,下面哪一个是实现同步的最佳代码?
1)
FileWriter fw = new FileWriter("./logs/server.log", true);
synchronized (fw) {
BufferedWriter bw = new BufferedWriter(fw);
bw.write(message);
bw.newLine();
bw.close();
}
Run Code Online (Sandbox Code Playgroud)
2)
BufferedWriter bw = new BufferedWriter(new FileWriter("./logs/server.log", true));
synchronized(bw) {
bw.write(message);
bw.newLine();
bw.close();
}
Run Code Online (Sandbox Code Playgroud)
3)
synchronized(util.class) { //yes, the class name is started with lowercase
BufferedWriter bw = new BufferedWriter(new FileWriter("./logs/server.log", true));
bw.write(message);
bw.newLine();
bw.close();
}
Run Code Online (Sandbox Code Playgroud)
4)其他意见?
谢谢.
| 归档时间: |
|
| 查看次数: |
8091 次 |
| 最近记录: |