Tôi vừa mới nhận thấy một hành vi đáng lo ngại. Hãy nói rằng tôi có một chương trình độc lập bao gồm một đối tượng duy nhất:Scala: Bộ sưu tập song song trong bộ khởi tạo đối tượng gây ra một chương trình treo
object ParCollectionInInitializerTest {
def doSomething { println("Doing something") }
for (i <- (1 to 2).par) {
println("Inside loop: " + i)
doSomething
}
def main(args: Array[String]) {
}
}
Chương trình này là hoàn toàn vô tội và, khi phạm vi sử dụng trong vòng lặp for là không một trường hợp tương, thực hiện đúng cách, với sản lượng sau :
Bên trong vòng lặp: 1
Làm một cái gì đó
Bên trong vòng lặp: 2
Làm một cái gì đó
Thật không may, khi sử dụng bộ sưu tập song song, chương trình chỉ bị treo mà không bao giờ gọi phương thức doSomething, vì vậy đầu ra như sau:
Bên trong vòng lặp: 2
Bên trong vòng lặp: 1
Và sau đó chương trình bị treo.
Đây có phải là lỗi khó chịu không? Tôi đang sử dụng scala-2.10.
liên quan: http: // stackoverflow.com/questions/27549671/how-to-diagnose-hoặc-detect-deadlocks-in-java-static-initializers – Rich