Go频道和Java BlockingQueue之间有什么区别吗?两者都是具有相似阻塞和内存模型语义的队列.可选地,两者都可以具有容量集.
Go频道和Java BlockingQueue之间有什么区别吗?两者都是具有相似阻塞和内存模型语义的队列.可选地,两者都可以具有容量集.
我想说最大的区别是Go通道支持select
语句,它允许您只执行一个通道操作.一个例子(从Go language specification改为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接收操作之一.进入SELECT时,随机 Select 就绪频道(如果有).否则,操作将阻塞,直到其中一个通道就绪.
我不知道有任何简单的方法可以使用Java实用程序对此频道 Select 进行建模.有人可能会争辩说,这是select
语句的一个属性,而不是频道的设计,但我会争辩说,这是频道设计的基础.