Go channel 和 Java BlockingQueue 之间有什么区别吗?两者都是具有相似阻塞和内存模型语义的队列。 (可选)两者都可以设置容量。
最佳答案
我想说最大的区别是 Go channel 支持 select
语句,它允许您只执行一个 channel 操作。一个示例(由 Go language specification 更改):
select {
case i1 = <-c1:
print("received ", i1, " from c1\n")
case c2 <- i2:
print("sent ", i2, " to c2\n")
case i3, ok := (<-c3): // same as: i3, ok := <-c3
if ok {
print("received ", i3, " from c3\n")
} else {
print("c3 is closed\n")
}
}
在此示例中,将执行从 c1 接收、发送到 c2 或从 c3 接收操作中的一个。进入选择时,会随机选择一个就绪 channel (如果有)。否则,操作会阻塞,直到其中一个 channel 准备好。
我不知道使用 Java 实用程序来模拟此 channel 选择的任何简单方法。有人可能会说这是 select
语句的属性,而不是 channel 的设计,但我认为这是 channel 设计的基础。
关于java - Go channel vs Java BlockingQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10690403/