请问 Java 有类似 golang 的 channel 的类吗?

2020-05-15 10:35:09 +08:00
 zhuangsj

最近做项目需要实现线程堵塞等待另一个线程的计算结果,

如果是 golang,可以用 channel,但是 java 好像没有对应的类?所以只能用个 blokingQueue 来实现。。。

感觉 java 应该有这种实现类,可能我找不到。。。

2243 次点击
所在节点    程序员
8 条回复
asAnotherJack
2020-05-15 10:47:23 +08:00
只是实现阻塞线程的话,用 countdownLatch 、wait notify 、甚至锁都可以
coolmenu
2020-05-15 10:49:23 +08:00
如果就是楼主的需求,java 配套设施足够用了。
AmmeLid
2020-05-15 10:50:13 +08:00
java.util.concurrent.Exchanger

应该找的是这个吧,用起来肯定是没有 golang 那么优雅
php01
2020-05-15 10:54:26 +08:00
这两个不一样的吧。
据我了解,一个是将数据上锁保证安全,一个是数据本身就是安全的,通过传递数据来达到数据共用的。
gejun123456
2020-05-15 11:02:47 +08:00
、thread.join 包个对象进去或者用线程池 Callable
AmmeLid
2020-05-15 11:13:51 +08:00
#3 如果是单纯的生产者消费者模型,可以直接用 java.util.concurrent.SynchronousQueue
pursuer
2020-05-15 11:33:09 +08:00
如果只是等待线程计算结果,用 Future 就够了,BlockingQueue 都麻烦了
NeinChn
2020-05-15 22:46:55 +08:00
+1,一般来说除了特殊场景,直接拿 future 多简单,还要加塞个 blocking queue 多麻烦

Future<T> future = CompletableFuture.supplyAsync(() -> T);
//blahblah
T returnObject = future.get(timeout);

多简单的事情,连 channel 这种概念都用不到.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671917

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX