Scala ImageIO.read并发性
我想知道当并发调用下面的方法时,如何确保它是安全的。当从两个不同的参与者调用它时,图像可能会混淆并保存在一个文件中,该方法将为给定的url返回不同的图像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
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好的,谢谢我更新了