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

你可能感兴趣的:(java,nio,开发语言)