ファイルに書き込むメソッドが1つあります。私は、ファイルオブジェクトJavaで非静的メソッド変数(オブジェクト)を同期する方法
class MessageFile{
public static final String fileName="Main.html"
@AutoWired
AppConifg appconfig;
public boolean writeToFile(String fileContent) throws Exception{
String path = appConfig.getNewsPath() + File.separator + fileName; // getNewsPath is non-static method
final File alertFile= new File(path);
FileOutputStream out = null;
synchronized (alertFile) {
if (!alertFile.exists()) {
alertFile.createNewFile();
}
try {
out = new FileOutputStream(alertFile, false);
out.write(fileContent.getBytes());
out.flush();
} finally {
if (out != null) {
out.close();
}
}
}
return true;
}
}
しかし、上記のコードは、このクラスの別のインスタンスなどのファイルオブジェクトの排他的ロックは、このクラスのロックを持っているし、ファイルに書き込むことができますロック取るwon`t同期させる必要があります。 だから私はこのケースをどのように処理したいですか? タイムスタンプを追加する一時ファイル名を作成する回避策が見つかったので(一時ファイル名は常に一意になります)、内容を書き込んだ後、最初に元のファイルを削除し、一時ファイルを元のファイル名に変更します。
あなたの質問は不明です。排他ロックを使用できないのはなぜですか? – RealSkeptic