解析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 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错