小编典典

转到频道与Java BlockingQueue

go

Go通道和Java BlockingQueue之间有什么区别吗?两者都是具有相似阻塞和内存模型语义的队列。两者都可以设置容量。


阅读 272

收藏
2020-07-02

共1个答案

小编典典

我要说的最大区别是Go通道支持该select语句,该语句使您可以执行一个通道操作。一个示例(从Go语言规范中更改):

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接收”操作之一。输入选择内容时,会随机选择一个就绪频道(如果有)。否则,操作将阻塞直到其中一个通道就绪。

我不知道使用Java实用程序为该通道选择建模的任何简单方法。有人可能会说这是select语句的属性,而不是通道的设计,但我会认为这是通道设计的基础。

2020-07-02