Scala ImageIO.read并发性

Scala ImageIO.read并发性,scala,concurrency,actor,javax.imageio,Scala,Concurrency,Actor,Javax.imageio,我想知道当并发调用下面的方法时,如何确保它是安全的。当从两个不同的参与者调用它时,图像可能会混淆并保存在一个文件中,该方法将为给定的url返回不同的图像 def readFromURL(url: URL): Box[(Array[Byte], String, String)] = { tryo { val image = ImageIO.read(url) val mimeType = url.openConnection().getContentType() val

我想知道当并发调用下面的方法时,如何确保它是安全的。当从两个不同的参与者调用它时,图像可能会混淆并保存在一个文件中,该方法将为给定的url返回不同的图像

def readFromURL(url: URL): Box[(Array[Byte], String, String)] = {
  tryo {
    val image = ImageIO.read(url)
    val mimeType = url.openConnection().getContentType()
    val imageType = mimeType.split("/")(1)
    val baos = new ByteArrayOutputStream()
    ImageIO.write(image, imageType, baos)
    val byteArray = baos.toByteArray()
    val fileName = org.apache.commons.codec.digest.DigestUtils.md5Hex(byteArray)
    baos.flush()
    baos.close()
    (byteArray, mimeType, fileName)
  }
}

在我看来,这是线程安全的,org.apache.commons.codec.digest.DigestUtils也被宣传为线程安全。

“当从两个不同的参与者调用它时,图像可能会混淆”-你是在问是否是这样的情况,还是你的体验是这样的?@haraldK这就是我的体验。当我增加并发性时,这种情况经常发生。也许是其他原因,但我真的感觉到,如果在某个时候创建了临时文件或类似的东西,它可能来自哪里。奇怪。。。我投票支持@monkjack的答案,因为我看不出任何错误(我不是Scala专家,但代码看起来非常像Java)。URL总是不同吗?@haraldK yes always;)monkjack可能是对的,我也会尝试使用ImageIO.setUseCache(false)@haraldK好的,谢谢我更新了