java基础五-IO(BIO\NIO\AIO)、锁(乐观锁\悲观锁)、同步\异步

1. IO:
  • 按功能来分:输入流(input)、输出流(output)。
  • 按类型来分:字节流和字符流。
  • 字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
2. BIO\NIO\AIO:
BIO:
  • 阻塞式IO,会为每个IO创建线程,执行某个IO的时候会等待其他IO执行完成之后才会开始其他线程的IO任务
  • 适用场景:适用于连接数较小且固定的情况,简单易用
NIO:
  • BIO的升级版,一个线程可以同时执行多个IO,而不用等待IO完成。
  • 使用选择器selector和通道channel完成任务,例如快递小哥会一次拿走很多包裹,然后选择放到蜂巢或者快递柜,不用管收件人是不是确认收到了。
  • 如果一个I/O操作不能立即完成(比如读取数据时数据尚未就绪),我们可以放弃该操作继续处理其他任务,也可以进行其他I/O操作,而不会被阻塞等待。
  • 适用场景:高并发网络连接,不需要等待就能完成的任务,提供更高的性能和资源利用率。
AIO:
  • BIO的升级版,异步处理任务,可以同时开始任务,使用回调(callBack)的模式确认事件结果
  • 提交后可以继续处理其他任务,待任务完成后再通过回调通知进行后续处理,例如餐厅服务员收到了很多点单,交给厨师后去收盘子了,等厨师做好后再交给顾客
  • 适用场景:需要等待的任务,例如文件传输等

3. 同步/异步:

同步:需要等待任务完成之后才会继续做其他任务,阻塞式,按照顺序执行

异步:同时执行任务,线程之间没有关联,不需要关注结果,执行后去执行下一个任务

4. 乐观锁/悲观锁:

乐观锁:

线程访问的时候会加乐观锁,可以正常访问,但是提交数据的时候会check数据是否发生更新,如果是需要重新加载提交。使用在冲突较少,并且能容忍更新失败的场景

悲观锁:

常见的使用synchronized关键字,数据读取和提交都会加锁,当一个事件使用了锁之后防止其他线程对数据的并发访问。用在冲突容易发生,并且对数据准确性和一致性要求比较高的场景

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值