当一个类中的方法被多个线程调用时,方法中可能有对公共的资源进行操作,如果不让它一个个有顺序的执行那么公共资源的数据可能产生错乱,
解决方法
----------------------------------------------------------------------------------------------------------------------------------------------------单例模式
说明: 实现单例模式,也就是这个类一次只能实例化一次,当使用完后才能进行下一次实例化,这样才能保证这个类里的方法每次只执行一次
最好的单例模式: 用枚举实现单例模式
原因: 定义枚举时使用enum 和 class 一样,是java中的一个关键字,就像class对应一个Class类一样,enum也对应有一个Enum类
通过源码分析,各个枚举项都是通过static定义的,而java的类加载机制对static类型属性会在类被加载之后被初始化,因为虚拟机
在加载类的时候会使用ClassLoader的loadClass方法,而这个方法使用同步代码块保证了线程安全,所以创建一个enum类型是线程
安全的,而单例模式主要就是解决线程安全问题,用枚举天生就是线程安全的
用枚举还可以防止反序列化破坏单例的情况,普通类反序列化过程,会通过反射调用类的默认构造函数一初始化对象,即使定义了构造函数是private的,也会被破坏,就可以出现多个new出来对象,单例模式就会被破坏,但是枚举的反序列化并不是通过反射实现的,不会出现 单例被破坏的情况
总结: jvm中保证了枚举是线程安全的,反序列化时不同于普通的类不会重新new出来对象。
我的笔记博客版权我的笔记博客版权