重载与重写的区别 java java synchronized锁对象,当对象引用是null的时候,锁的是什么?
java synchronized锁对象,当对象引用是null的时候,锁的是什么?
谢谢
!Java语言规范明确指出,如果锁定的对象为null,则会发生NullPointerException。规范的内容如下:
表达式的类型必须是引用类型,否则会发生完全时间错误。首先计算表达式,执行同步语句。然后:如果表达式的求值由于某种原因完全完成,那么synchronized语句也会因为同样的原因突然完成。否则,如果表达式的值为null,则volatile的本质是NullPointerException,它告诉JVM寄存器(工作内存)中当前变量的值是不确定的,需要从主存中读取;synchronized是锁定当前变量,只有当前线程才能访问该变量,其他线程被阻塞。
2. Volatile只能在变量级别使用;synchronized可以在变量、方法和类级别使用。
3. Volatile只能实现变量修改的可见性和原子性,synchronized可以保证变量修改的可见性和原子性。
4. Volatile不会导致线程阻塞;synchronized可能会导致线程阻塞。
5. 用volatile标记的变量不会被编译器优化;用synchronized标记的变量可以被编译器优化。
重载与重写的区别 java 什么叫变量 synchronized使用方式
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。