0
다음 메소드가 동시에 호출 될 때 어떻게 안전한지 확인하고 싶습니다. 두 명의 다른 배우가 호출 할 때 이미지가 섞여서 메서드에 저장하면 주어진 URL에 대해 다른 이미지가 반환됩니다.ImageIO.read concurrency
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)
}
}
"두 명의 다른 배우에게 전화가 왔을 때 이미지가 섞일 수 있습니다."- 이것이 사실인지 묻는가, 아니면 경험 한 것입니까? – haraldK
@haraldK 내가 경험 한 것입니다. 동시성을 높이면 많은 일이 발생합니다. 어쩌면 뭔가 다른 것 일지 모르지만, 나는 임시 파일이나 그와 비슷한 것이 어느 시점에서 만들어 졌다면 어디에서 오는지 알 수 있습니다. – Roch
이상한 ... 나는 @ monkjack의 대답에 투표했다. 나는 틀린 것을 볼 수 없기 때문에 (나는 스칼라 전문가는 아니지만, 코드는 자바와 매우 흡사하다.) URL은 항상 다른가요? – haraldK