Java并发中final关键字如何确保线程安全?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1336个文字,预计阅读时间需要6分钟。
不可变性(Immutable)指的是一旦对象被创建,其状态就不能被修改。也就是说,具有不可变性的对象一定是线程安全的,我们不需要采取额外的安全措施,也能保证线程安全。
什么是不变性(Immutable)
- 如果对象在被创建后,状态就不能被修改,那么它就是不可变的
- 具有不变性的对象一定是线程安全的,我们不需要对其采取任何额外的安全措施,也能保证线程安全
final
- 在java中,final可以用来修饰类,方法和变量(成员变量或局部变量)。
final的作用
- 早期:早期的Java实现版本中,会将final方法转为内嵌调用
- 现在:类防止被继承、方法防止被重写、变量防止被修改,天生是线程安全的,而不需要额外的同步开销
修饰方法
- final不可以修饰构造方法
- 静态方法也不可以被重写 使用final方法的原因主要有两个:
- 1、把方法锁定,以防止继承类对其进行更改。
- 2、效率,在早期的java版本中,会将final方法转为内嵌调用。但若方法过于庞大,可能在性能上不会有多大提升。因此在最近版本中,不需要final方法进行这些优化了。
- final方法意味着“最后的、最终的”含义,即此方法不能被重写。
注意:若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法。
本文共计1336个文字,预计阅读时间需要6分钟。
不可变性(Immutable)指的是一旦对象被创建,其状态就不能被修改。也就是说,具有不可变性的对象一定是线程安全的,我们不需要采取额外的安全措施,也能保证线程安全。
什么是不变性(Immutable)
- 如果对象在被创建后,状态就不能被修改,那么它就是不可变的
- 具有不变性的对象一定是线程安全的,我们不需要对其采取任何额外的安全措施,也能保证线程安全
final
- 在java中,final可以用来修饰类,方法和变量(成员变量或局部变量)。
final的作用
- 早期:早期的Java实现版本中,会将final方法转为内嵌调用
- 现在:类防止被继承、方法防止被重写、变量防止被修改,天生是线程安全的,而不需要额外的同步开销
修饰方法
- final不可以修饰构造方法
- 静态方法也不可以被重写 使用final方法的原因主要有两个:
- 1、把方法锁定,以防止继承类对其进行更改。
- 2、效率,在早期的java版本中,会将final方法转为内嵌调用。但若方法过于庞大,可能在性能上不会有多大提升。因此在最近版本中,不需要final方法进行这些优化了。
- final方法意味着“最后的、最终的”含义,即此方法不能被重写。
注意:若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法。

