一、介绍
在并发编程中,主要就是处理共享资源的互斥访问。可能会采用加锁来保证并发安全,如synchronized关键字,Lock锁。也可能采用乐观锁的cas保证并发安全。
当共享资源不可更改时,多个线程间并发读取共享资源就不会存在线上安全问题,例如String类就是利用不可变类成为线程安全的类的。
不可变对象(Immutable Object)的定义为:对象一旦被创建后,对象所有的状态及属性在其生命周期内不会发生任何变化。
二、如何创建一个不可变类
1)所有的成员变量必须是private
2)最好用final修饰(非必须)
3)不提供能修改原有状态的方法。即使提供,也应该是新创建一个对象,然后再新创建的对象上进行修改并返回新对象
4)get方法不能对外泄露this引用以及成员变量的引用
5)不允许类被继承(非必须)
6)通过构造器初始化所有成员变量,引用类型的成员变量必须进行深拷贝
三、final关键字
final可以修饰类、方法和变量(包括成员变量和局部变量)
1.修饰类
final修饰一个类,表示这个类不能被继承。并且final类中所有的成员方法都会被隐式地指定为final方法。
2.修饰方法
final修饰的方法不能被子类所重写,子类不能够存在和父类同名同参的方法。
2.修饰变量
final成员变量表示常量。当修饰基本数据类型时,表示该基本数据类型的值一旦初始化不能发生改变。修饰引用类型时,表示初始化后便不能指向其他对象了,但是该引用指向的对象内容可以改变。
final修饰的成员变量,有两种初始化方法。一种是在变量声明的时候初始化;第二种是在构造函数中初始化。