从不可变对象的定义来看,其实比较简单,就是一个对象在创建后,不能对该对象进行任何更改。  我们是否考虑过一个问题:假如Java中的String、包装器类设计成可变的ok么?  我们这一节主要来聊聊不可变对象存在的意义。  大多数情况下,对于资源互斥访问的场景,都是采用加锁的方式来实现对资源的串行访问,来保证并发安全,如synchronize关键字,Lock锁等。  事实上,引起线程安全问题的根本原因在于:多个线程需要同时访问同一个共享资源。  假如没有共享资源,那么多线程安全问题就自然解决了,Java中提供的ThreadLocal机制就是采取的这种思想。  我们来看一个例子,这个例子来源于:  例如一个有个线程1执行了以下代码:

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理

通过实例解析Java不可变对象原理