同步与异步、阻塞与非阻塞

最近在复习Java IO模型,其中对于同步与异步、阻塞与非阻塞概念的理解一直不够深入。在看了多篇前人总结的博客之后,对于这二者的区别终于有点领悟。

一、概念

同步

A调用B,B处理直到获得结果,才返回给A。需要调用者一直等待和确认调用结果是否返回,然后继续往下执行。

异步

A调用B,无需等待结果,B通过状态通知A或回调函数来处理。调用结果返回时,会以消息或回调的方式通知调用者。

阻塞

A调用B,A被挂起直到B返回结果给A,才能继续执行。
调用结果返回前,当前线程挂起不能够处理其他任务,一直等待调用结果返回。

非阻塞

A调用B,A不会被挂起,A可以执行其他操作。
调用结果返回前,当前线程不挂起,可以处理其他任务。

二、两者区别

同步异步是个操作方式,阻塞非阻塞是线程的一种状态。

同步异步指的是被调用者结果返回时通知线程的一种机制,阻塞非阻塞指的是调用结果返回进程前的状态,是挂起还是继续处理其他任务。

下面是我认为两篇写得比较清晰也比较简洁的博客。
https://www.cnblogs.com/pengsixiong/p/5556403.html
https://www.jianshu.com/p/9fa26b0b22a0

posted @ 2019-03-31 20:08  heyyw  阅读(264)  评论(0编辑  收藏  举报