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是对当前对象来说的,所有不需要添加。
以上是我的观点,欢迎纠正补充
解决 无用评论 打赏 举报