【问题标题】:How would I implement Go's unbuffered channels in Java?我将如何在 Java 中实现 Go 的无缓冲通道?
【发布时间】:2017-04-25 22:56:22
【问题描述】:

Go 提供 unbuffered and buffered channels 用于 goroutine(线程)之间的通信。在 Java 中将缓冲通道实现为有界缓冲区是 straightforward

Go 的无缓冲通道要求一个 goroutine 在另一个 goroutine 接收时发送。谁能向我解释如何用 Java 实现它?

【问题讨论】:

  • 我认为您的意思是 SynchronousQueue,它从一个线程传递到另一个线程而没有缓冲。一般来说,如果可以在 Java 8 中使用多线程,最好从 Parallel Streams 开始。
  • @PeterLawrey 谢谢。我的兴趣是学术。我不想使用队列——我想了解它是如何实现的。既然你给了我正确的术语,我会查一下。
  • 您应该能够阅读它的源代码。注意:同步队列非常简单,因为它不存储任何内容。
  • @PeterLawrey 我知道您已经享有盛誉,但您愿意给出答案吗? grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/…

标签: java go synchronization


【解决方案1】:
【解决方案2】:

我建议您也查看JCSP 库。在this answer中有更多关于JCSP的细节。

Java 没有任何与 Goroutine 等价的东西,唉。 (曾经,很久以前就有“绿线”,但被废弃了)。因此,如果您改用线程,一旦线程数量开始变得有趣(例如超过一万),您将承受沉重的内存占用。每个 Java 线程都需要一个操作系统线程和一个大的堆栈空间。

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 2012-10-17
    • 2021-12-25
    • 1970-01-01
    • 2017-09-06
    • 2019-01-07
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多