同步、异步、阻塞、非阻塞怎么理解?
2026/1/14...大约 1 分钟Java八股文
注意
内容来源网络,仅供学习使用。
不要相信文档中的链接、联系方式等!!!
同步、异步、阻塞、非阻塞怎么理解?
典型回答
同步与异步描述的是被调用者的。
譬如A调用B。
如果是同步,B在接到A的调用后,会立即执行要做的事。A的本次调用可以得到结果。
如果是异步,B在接到A的调用后,不保证会立即执行要做的事,但是保证会去做,B在做好了之后会通知A。A的本次调用得不到结果,但是B执行完之后会通知A。
阻塞与非阻塞描述的是调用者的。
A调用B。
如果是阻塞,A在发出调用后,要一直等待,等着B返回结果。
如果是非阻塞,A在发出调用后,不需要等待,可以去做自己的事情。
同步不一定阻塞,异步也不一定非阻塞。没有必然关系。
举个简单的例子,老张烧水:
- 老张把水壶放到火上,一直在水壶旁等着水开。(同步阻塞)
- 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
- 老张把响水壶放到火上,一直在水壶旁等着水开。(异步阻塞)
- 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
1和2的区别是,调用方在得到返回之前所做的事情不一样。
1和3的区别是,被调用方对于烧水的处理不一样。