学习笔记(02):Java并发编程精讲-线程的同步异步,阻塞非阻塞

立即学习:https://edu.csdn.net/course/play/26270/326858?utm_source=blogtoedu

同步的概念

阻塞式调用,调用方必须等待响应方执行完毕才会返回。

同步的使用场景

  1. 大多数非异步场景(不用异步,就用同步来调用),如:百度搜索,客户端同步调用服务端搜索接口,等待服务端实时结果
  2. 在编排的流程中,必须等待拿到响应结果才能去做下一步操作,且在实时链路中相互之间有关联或关联数据的。如:电商中商品详情页的查询接口的内部实现

异步

非阻塞式调用,立即返回,调用方无需等待响应方返回实际结果,响应方会通过状态、通知或回调来告知调用方。

异步使用场景:

  1. 耗时任务,主线程中提交耗时任务到线程池,然后通过Future来异步获取任务执行结果,这里也可以由异步任务发消息等途径来通知主线程
  2. 电商下单链路的非核心链路调用,为了下单的性能考虑,将订单下发的发货仓库等非实时流程放在后续操作,提高下单的相应速度。

同步异步比较:

同步:

  • 优势
  1. 可以拿到实时结果进行处理,上下文信息始终在一个代码块,代码处理上更加方便直观
  2. 对错误和异常处理可以做到实时
  • 劣势
  1. 耗时的接口响应会影响整个流程的性能

异步:

  • 优势
  1. 不影响主线乘的执行,降低响应时间,提高应用的性能和效率
  2. 及时释放系统资源,如线程占用,让系统去做更多有价值的事
  • 劣势
  1. 为了保障数据最终一致性,需要对账系统去做好监控和保障
  2. 需要更多异步任务去补偿系统间的数据一致性

阻塞非阻塞

阻塞:

  • 调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回

非阻塞:

  • 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程,而会立即返回

怎么理解同步异步、阻塞非阻塞?

同步异步:

  • 关注点是得到结果的方式
  • 同步是实时返回结果,异步是通过共享变量、通知消息或回调来得到结果

阻塞非阻塞:

  • 关注点在程序在等待调用结果返回时的状态
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值