×

多线程 并发

工具并发类安全

我的笔记 我的笔记 发表于2018-08-07 19:49:06 浏览3152 评论0

抢沙发发表评论

当一个类中的方法被多个线程调用时,方法中可能有对公共的资源进行操作,如果不让它一个个有顺序的执行那么公共资源的数据可能产生错乱,

解决方法

----------------------------------------------------------------------------------------------------------------------------------------------------单例模式

说明:    实现单例模式,也就是这个类一次只能实例化一次,当使用完后才能进行下一次实例化,这样才能保证这个类里的方法每次只执行一次

  最好的单例模式:     用枚举实现单例模式

  原因:         定义枚举时使用enum class 一样,是java中的一个关键字,就像class对应一个Class类一样,enum也对应有一个Enum

通过源码分析,各个枚举项都是通过static定义的,而java的类加载机制对static类型属性会在类被加载之后被初始化,因为虚拟机

在加载类的时候会使用ClassLoaderloadClass方法,而这个方法使用同步代码块保证了线程安全,所以创建一个enum类型是线程

安全的,而单例模式主要就是解决线程安全问题,用枚举天生就是线程安全的

     用枚举还可以防止反序列化破坏单例的情况,普通类反序列化过程,会通过反射调用类的默认构造函数一初始化对象,即使定义了构造函数是private的,也会被破坏,就可以出现多个new出来对象,单例模式就会被破坏,但是枚举的反序列化并不是通过反射实现的,不会出现 单例被破坏的情况

   总结: jvm中保证了枚举是线程安全的,反序列化时不同于普通的类不会重新new出来对象。

我的笔记博客版权我的笔记博客版权