小编Chi*_*per的帖子

写入BufferedWriter的最佳Scala线程安全方法是什么?

我有一个简单的方法,将一行数据写入一个文件后跟一个异步执行的新行.

  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

4
推荐指数
1
解决办法
715
查看次数