我有一个简单的方法,它会异步地写入一行数据到一个文件中,并在该行后面紧接着换行符。
当我的程序运行时,由于调用的异步性质,文件中的行会出现“混乱”。例如...假设writeToFile(bw,“foo”)被异步地执行了3次,我可能会得到:
正确的输出
foo foo foo
可能的错误输出
foofoo foo
我可以通过使用像这样的synchronized方法来避免这种可能性:
def writeToFile(bw: BufferedWriter, str: String) = {
bw.write(str)
bw.newLine
}
当我的程序运行时,由于调用的异步性质,文件中的行会出现“混乱”。例如...假设writeToFile(bw,“foo”)被异步地执行了3次,我可能会得到:
正确的输出
foo foo foo
可能的错误输出
foofoo foo
我可以通过使用像这样的synchronized方法来避免这种可能性:
def writeToFile(bw: BufferedWriter, str: String) = synchronized {
bw.write(str)
bw.newLine
}
我研究发现,我无法确定在扩展我的应用程序时这种方法有多“安全”。 我能找到的唯一使用synchronized的示例是访问集合时,而不是写入文件。我的应用程序是基于Play! Framework 2.4.2构建的。