解析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是对当前对象来说的,所有不需要添加。

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

    评论

报告相同问题?

悬赏问题

  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能