最近做项目需要实现线程堵塞等待另一个线程的计算结果,
如果是 golang,可以用 channel,但是 java 好像没有对应的类?所以只能用个 blokingQueue 来实现。。。
感觉 java 应该有这种实现类,可能我找不到。。。
1
asAnotherJack 2020-05-15 10:47:23 +08:00
只是实现阻塞线程的话,用 countdownLatch 、wait notify 、甚至锁都可以
|
2
coolmenu 2020-05-15 10:49:23 +08:00
如果就是楼主的需求,java 配套设施足够用了。
|
3
AmmeLid 2020-05-15 10:50:13 +08:00
java.util.concurrent.Exchanger
应该找的是这个吧,用起来肯定是没有 golang 那么优雅 |
4
php01 2020-05-15 10:54:26 +08:00
这两个不一样的吧。
据我了解,一个是将数据上锁保证安全,一个是数据本身就是安全的,通过传递数据来达到数据共用的。 |
5
gejun123456 2020-05-15 11:02:47 +08:00
、thread.join 包个对象进去或者用线程池 Callable
|
6
AmmeLid 2020-05-15 11:13:51 +08:00
#3 如果是单纯的生产者消费者模型,可以直接用 java.util.concurrent.SynchronousQueue
|
7
pursuer 2020-05-15 11:33:09 +08:00
如果只是等待线程计算结果,用 Future 就够了,BlockingQueue 都麻烦了
|
8
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 这种概念都用不到. |