请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

线程间通信和等待的区别

在学到countdownLatch 这一节的时候

老师有讲到 AB两个线程 可以等到都结束后执行

之前做开发有遇到过这个问题

想请教下老师

threadPool.await()  

实现callable 的future.get() 

以及countdownLatch.await() 貌似效果都是可以阻塞到所有任务结束后再执行

不知有什么区别呢

正在回答 回答被采纳积分+3

1回答

Jimin 2018-05-04 08:56:46

你好,countdownlatch相当于一个屏障,相当于是主线程等待其他相关线程运行完才能运行之后的代码再继续执行;而future的get只是等待当前线程执行完获得一个结果,同时他还支持取消等高级操作。
虽然都涉及到阻塞,但是他们各自能解决的事情是不同的。

0 回复 有任何疑惑可以回复我~
  • 提问者 about_blank #1
    future.get() 在等待当前线程结果的过程中 
    其他线程不会阻塞  等待该线程获取结果后一起执行么?。。
    回复 有任何疑惑可以回复我~ 2018-05-04 10:30:45
  • Jimin 回复 提问者 about_blank #2
    他只会堵塞自己所在的线程,等待拿到结果再继续
    回复 有任何疑惑可以回复我~ 2018-05-04 10:32:29
  • 提问者 about_blank 回复 Jimin #3
    那如果主线程中有一个子线程 子线程future.get 这时候主线程不会等待 会执行下面的代码 是吗 老师 如果主线程执行了下面的代码 但是子线程的结果没有拿到 主线程操作这个返回值 是不是会出现问题呢
    回复 有任何疑惑可以回复我~ 2018-05-04 10:42:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信