【Java】同步异步阻塞非阻塞概念

一. 阻塞/非阻塞

阻塞非阻塞说的是线程的状态

  1. 阻塞: 线程调用IO接口后,一直等待,不能做其它事
  2. 非阻塞:线程调用IO接口时,可以做其它事,不用一直等待

二. 同步/异步

同步和异步说的是消息的通知机制

  1. 同步:线程调用IO接口后,不停询问IO接口是否完成
  2. 异步:线程调用IO接口后,不用一直询问,由IO接口告知结果

三. 组合

  1. 同步阻塞: 调用IO接口后,线程一直等待并不停询问IO接口调用结果
  2. 同步非阻塞:调用IO接口后,线程可以做其它事,隔段时间询问IO接口调用结果
  3. 异步阻塞: 调用IO接口后,线程一直等待并等待IO接口返回结果
  4. 异步非阻塞:调用IO接口后,线程可以做其它事,由IO接口告知结果

回调或事件机制实现异步


四. 示例

以 小明点击下载按钮 为例


同步阻塞:如果小明点击下载按钮之后,就一直干瞪着进度条不做其他任何事情直到软件下载完成,这是同步阻塞;


异步阻塞:如果小明点击下载按钮之后,就一直干瞪着进度条不做其他任何事情直到软件下载完成,但是软件下载完成其实是会「叮」的一声通知的(但小明依然那样干等着),这是异步阻塞;


同步非阻塞:如果小明点击下载按钮之后,就去做其他事情了,不过他总需要时不时瞄一眼屏幕看软件是不是下载完成了,这是同步非阻塞;


异步非阻塞:如果小明点击下载按钮之后,就去做其他事情了,软件下载完之后「叮」的一声通知小明,小明再回来继续处理下载完的软件,这是异步非阻塞。


五. 参考资料

  1. https://zhuanlan.zhihu.com/p/22707398
  2. https://www.zhihu.com/question/27991975/answer/56432635
posted @ 2021-03-03 12:14    阅读(233)  评论(0编辑  收藏  举报