解析Ta 2020-12-18 17:59 采纳率: 0%
浏览 44

FileInputStream的FileChannel为什么没有加volatile?

FileChannel channel没加volatile,boolean closed加了volatile。

  • 写回答

12条回答 默认 最新

  • 码代码的小仙女 2020-12-19 12:27
    关注

    我理解 首先我们要知道volatile关键字的主要作用是啥

    volatile变量的两种特性:

    1变量可见性

    保证该变量对所有线程可见,这里的可见性指的是当一个线程修改了变量的值,那么新的值对于其他线程是可以立即获取的。

    2禁止重排序

    volatile禁止了指令重排。比sychronized更轻量级的同步锁。在访问volatile 变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。volatile适合这种场景:一个变量被多个线程共享,线程直接给这个变量赋值。

    sychronized()  作用的对象是这个类的所有对象 相当于类锁

    closeLock这个变量是适用于所有对象的,所以要加volatile关键字,保证其可见性

    FileChannel是对当前对象来说的,所有不需要添加。

    以上是我的观点,欢迎纠正补充

    评论

报告相同问题?

悬赏问题

  • ¥15 怎么解决属性错误:“NoneType”对象没有“apps”属性
  • ¥20 C++哈希表的设计构造哈希表
  • ¥15 FutureWarning:不推荐使用空或全 NA 条目的 DataFrame 串联行为。怎么改呢?
  • ¥15 Chatgpt突然无法正常显示数学公式,如何解决?
  • ¥15 一个用华为模拟器做的实验。
  • ¥28 opencv Cuda C++编译
  • ¥15 插入sim卡4g模组反复断连
  • ¥100 如何把 16bit Bayer 图像数据转换为 TIFF RGB
  • ¥15 进行基于用户的协同过滤推荐,使用准确率和召回率评价推荐模型的效果
  • ¥15 word脚注设置不起空格符号