Java中PrintStream的线程安全性
作者:互联网
我正在尝试写入文件.我需要能够“附加”到文件而不是覆盖它.另外,我需要它是线程安全和高效的.我目前拥有的代码是:
private void writeToFile(String data) {
File file = new File("/file.out");
try {
if (!file.exists()) {
//if file doesnt exist, create it
file.createNewFile();
}
PrintStream out = new PrintStream(new FileOutputStream(file, true));
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
out.println(dateFormat.format(date) + " " + data);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
一切都很好.我只是不知道PrintStream是否是线程安全的.因此,我的问题是:从多个PrintStream实例写入同一物理文件是否安全?如果是这样,它是否使用锁定(降低性能)或排队?
您是否知道任何本机Java库都是线程安全的并且使用队列?
如果没有,我写自己的书就没问题.我只是想先看看是否有任何本机,然后再写自己的东西.
解决方法:
PrintStream源表明它是线程安全的.
如果要从不同的线程写入同一文件,为什么不跨线程共享同一PrintStream实例? PrintStream为您完成同步.
/**
* Prints a String and then terminate the line. This method behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>String</code> to be printed.
*/
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
标签:thread-safety,printstream,java 来源: https://codeday.me/bug/20191122/2057391.html