• Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别


    1. 同步:

    所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就必须先得到返回值了

    换句话话说,调用者主动等待这个"调用"的结果。

    对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已

    2. 异步:

    所谓异步,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果

    换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在"调用"发出后,"被调用者"通过状态通知来通知调用者,或通过回调函数处理这个调用

    同步 和 异步 关注的是消息通信机制 (synchronous communication/ asynchronous communication),举个通俗的例子:

      你打电话问书店老板有没有《Java虚拟机》这本书,如果是同步通信机制,书店老板会说,你稍等,"我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
      而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。


    3. 阻塞式:

    阻塞调用是指调用结果返回之前,当前线程会被挂起(线程阻塞)。函数只有在得到结果之后才会返回。

    有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已

    4. 非阻塞式:

    非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

    阻塞非阻塞 关注的是程序(线程)在等待调用结果(消息,返回值)时的 状态

    你打电话问书店老板有没有《Java虚拟机》这本书,你如果是阻塞式调用,你会一直把自己"挂起",直到得到这本书有没有的结果;
    如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。
     
    在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。



  • 相关阅读:
    jQuery选择器
    asp.net 操作 excel 出现 class 组件错误 或 打开文件错误
    [转]Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
    Microsoft Excel 不能访问文件“ 文件名称或路径不存在。 • 文件正被其他程序使用。 • 您正要保存的工作簿与当前打开的工作簿同名。
    页面打印 css
    如何在excel数据透视表的顶部显示列总计
    asp中javascript或jquery如果在body中 且需要页面元素 则需要放在最后
    sqlserver游标使用
    excel 冻结多行
    Request.Form("cardno").Item(y) 的count总是为0
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5701494.html
Copyright © 2020-2023  润新知