2013-08-25 2 views
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) 
    } 
} 
+0

"두 명의 다른 배우에게 전화가 왔을 때 이미지가 섞일 수 있습니다."- 이것이 사실인지 묻는가, 아니면 경험 한 것입니까? – haraldK

+0

@haraldK 내가 경험 한 것입니다. 동시성을 높이면 많은 일이 발생합니다. 어쩌면 뭔가 다른 것 일지 모르지만, 나는 임시 파일이나 그와 비슷한 것이 어느 시점에서 만들어 졌다면 어디에서 오는지 알 수 있습니다. – Roch

+0

이상한 ... 나는 @ monkjack의 대답에 투표했다. 나는 틀린 것을 볼 수 없기 때문에 (나는 스칼라 전문가는 아니지만, 코드는 자바와 매우 흡사하다.) URL은 항상 다른가요? – haraldK

답변

2

이 나와 org.apache.commons.codec.digest.DigestUtils에 스레드로부터 안전도 안전 스레드로 광고되어 보인다.

관련 문제