object test {
def main(args: Array[String]) {
val buf: ArrayBlockingQueue[Integer] = new ArrayBlockingQueue(5)
for (p <- 1 to 2)
ExecutionContext.global.execute(() =>
for (i <- 1 to 10) {println(s"Producer$p producing $i"); buf.put(i)}
)
for (c <- 1 to 3)
ExecutionContext.global.execute(() =>
for (i <- 1 to 10) {println(s"Consumer$c consumed ${buf.take}")}
)
Thread.sleep(1000)
}
}
Здраствуйте, такой вопрос по коду выше. Почему программа завершается?
Я думал, что вышеуказанная программа должна зависнуть, потому что ArrayBlockingQueue пуста, Producer`ов есть меньше чем Consumer и Consumer больше нечего убирать с queue.