最近做项目需要实现线程堵塞等待另一个线程的计算结果,
如果是 golang,可以用 channel,但是 java 好像没有对应的类?所以只能用个 blokingQueue 来实现。。。
感觉 java 应该有这种实现类,可能我找不到。。。
1
asAnotherJack 2020 年 5 月 15 日
只是实现阻塞线程的话,用 countdownLatch 、wait notify 、甚至锁都可以
|
2
coolmenu 2020 年 5 月 15 日
如果就是楼主的需求,java 配套设施足够用了。
|
3
AmmeLid 2020 年 5 月 15 日
java.util.concurrent.Exchanger
应该找的是这个吧,用起来肯定是没有 golang 那么优雅 |
4
anteros 2020 年 5 月 15 日
这两个不一样的吧。
据我了解,一个是将数据上锁保证安全,一个是数据本身就是安全的,通过传递数据来达到数据共用的。 |
5
gejun123456 2020 年 5 月 15 日
、thread.join 包个对象进去或者用线程池 Callable
|
6
AmmeLid 2020 年 5 月 15 日
#3 如果是单纯的生产者消费者模型,可以直接用 java.util.concurrent.SynchronousQueue
|
7
pursuer 2020 年 5 月 15 日
如果只是等待线程计算结果,用 Future 就够了,BlockingQueue 都麻烦了
|
8
NeinChn 2020 年 5 月 15 日
+1,一般来说除了特殊场景,直接拿 future 多简单,还要加塞个 blocking queue 多麻烦
Future<T> future = CompletableFuture.supplyAsync(() -> T); //blahblah T returnObject = future.get(timeout); 多简单的事情,连 channel 这种概念都用不到. |