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



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


我理解 首先我们要知道volatile关键字的主要作用是啥
volatile变量的两种特性:
1变量可见性
保证该变量对所有线程可见,这里的可见性指的是当一个线程修改了变量的值,那么新的值对于其他线程是可以立即获取的。
2禁止重排序
volatile禁止了指令重排。比sychronized更轻量级的同步锁。在访问volatile 变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。volatile适合这种场景:一个变量被多个线程共享,线程直接给这个变量赋值。
sychronized() 作用的对象是这个类的所有对象 相当于类锁
closeLock这个变量是适用于所有对象的,所以要加volatile关键字,保证其可见性
FileChannel是对当前对象来说的,所有不需要添加。
以上是我的观点,欢迎纠正补充