2017-04-24 51 views
0

Go提供unbuffered and buffered channels用於協程(線程)之間的通信。它是straightforward在Java中實現緩衝通道作爲有界緩衝區。我將如何在Java中實現Go的無緩衝通道?

Go的無緩衝通道需要一個goroutine在另一個goroutine正在接收時發送。任何人都可以向我解釋如何在Java中實現它?

+0

我認爲你的意思是SynchronousQueue從一個線程傳遞到另一個線程而沒有緩衝。一般來說,如果您可以在Java 8中使用多線程,則最好從Parallel Streams開始。 –

+1

@PeterLawrey謝謝。我的興趣是學術。我不想使用隊列 - 我想了解它是如何實現的。既然你已經給了我正確的術語,我會查找它。 –

+0

您應該可以閱讀它的來源。注意:同步隊列非常簡單,因爲它不存儲任何內容。 –

回答

0

我建議你也考慮了JCSP庫。在this answer有JCSP的更多細節。

Java沒有任何與Goroutines等效的東西。 (有一次,很久以前有'綠色螺紋',但他們被遺棄了)。因此,如果您使用線程代替,只要線程數量開始變得有趣(例如超過一萬個),您就會忍受大量內存佔用。每個Java線程都需要一個操作系統線程和一個大的堆棧空間。