我有一个简单的方法,将一行数据写入一个文件后跟一个异步执行的新行.
def writeToFile(bw: BufferedWriter, str: String) = {
bw.write(str)
bw.newLine
}
Run Code Online (Sandbox Code Playgroud)
当我的程序运行时,由于调用的异步性质,我在文件中得到"混合"行.例如...说writeToFile(bw,"foo")异步执行3次我可能得到:
正确的输出
FOO
FOO
FOO
可能输错
foofoo
FOO
我可以通过使用这样的synchronized方法来避免这种可能性:
def writeToFile(bw: BufferedWriter, str: String) = synchronized {
bw.write(str)
bw.newLine
}
Run Code Online (Sandbox Code Playgroud)
根据我的研究,我无法确定这对于扩展我的应用程序是多么"安全".我可以使用synchronized查找的唯一示例是访问集合时,而不是写入文件.我的应用程序是在Play中构建的!框架2.4.2.
multithreading scala bufferedwriter playframework playframework-2.4