解决多线程单例模式的线程不安全问题
来源:互联网 发布:出售淘宝花呗店铺 编辑:程序博客网 时间:2024/05/21 10:35
DCL双检查锁机制
public class MyConfig { private volatile static MyConfig myConfig = null;//volatile 保证每个线程都是从主存中读取最新的数据 private MyConfig(){ } public static MyConfig getInstance(){ if(null != myConfig){ }else { //同步代码块 synchronized (MyConfig.class){ if(null == myConfig){ myConfig = new MyConfig(); } } } return myConfig; }}
静态内置类
public class MyConfig { private MyConfig(){} private static class MyConfigHandler{ private static MyConfig myConfig = new MyConfig(); } public static MyConfig getInstance(){ return MyConfigHandler.myConfig; }}
序列化和反序列化
public class MyConfig implements Serializable{ private volatile static MyConfig myConfig = null;//volatile 保证每个线程都是从主存中读取最新的数据 private MyConfig(){ } public static MyConfig getInstance(){ if(null != myConfig){ }else { //同步代码块 synchronized (MyConfig.class){ if(null == myConfig){ myConfig = new MyConfig(); } } } return myConfig; } //单例类需实现这个方法,readResolve方法应对单例对象被序列化时候 public Object readResolve(){ return getInstance(); } public static MyConfig getMyConfig(){ try { MyConfig myConfig = MyConfig.getInstance(); FileOutputStream fileOutputStream = new FileOutputStream(new File("myobject.txt")); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(myConfig); objectOutputStream.close(); fileOutputStream.close(); System.out.println(myConfig.hashCode()); }catch (Exception e){ e.printStackTrace(); } MyConfig myConfig = null; try { FileInputStream fileInputStream = new FileInputStream(new File("myobject.txt")); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); myConfig = (MyConfig) objectInputStream.readObject(); objectInputStream.close(); fileInputStream.close(); System.out.println(myConfig.hashCode()); }catch (Exception e){ e.printStackTrace(); } return myConfig; }}
静态代码块
public class MyConfig{ private static MyConfig myConfig = null; private MyConfig(){} static{ myConfig = new MyConfig(); } public static MyConfig getInstance(){ return myConfig; }}
枚举实现
public class MyConfig { public enum MyConfigEnum{ connectionFactofry; private MyConnection myConnection = null; private MyConfigEnum(){ myConnection = new MyConnection(); } public MyConnection getMyConnection(){ return myConnection; } } public static MyConnection getConnection(){ return MyConfigEnum.connectionFactofry.getMyConnection(); }}public class MyConnection { public MyConnection(){ }}
0 0
- 解决多线程单例模式的线程不安全问题
- 单例模式解决多线程的问题
- 单例模式的几种写法:线程安全不安全
- java解决线程不安全问题的方法
- 单例模式(多线程不安全,序列化不安全,反射不安全实例)
- java多线程-单例设计模式的问题及解决
- 写一下单例模式,考虑线程安全与线程不安全的情况
- 懒汉式加载的单例模式怎么个线程不安全?
- servlet 是否线程安全,是否单例模式,怎么解决线程安全的问题
- 解决SimpleDateFormat的线程不安全问题的方法:ThreadLocal
- 线程同步:解决线程不安全问题
- java中如何解决线程不安全的问题呢?
- ArrayList的线程不安全问题
- 【Java多线程】之八:单例模式的线程安全
- JAVA多线程 <三>单例模式下的多线程问题
- JavaSE 多线程 单例设计模式涉及的多线程问题
- 多线程__【线程安全】【线程同步】【单例模式的线程安全】【线程死锁】
- 解决多线程已经资源浪费的单例模式代码
- 几个自己用得上的Qt Creator快捷键
- gulp 给静态资源文件添加hash(md5)后缀 防止缓存
- bootstrap制作评星效果
- 利用SurfaceView显示正弦曲线,仿造示波器
- ubuntu16.04底部的面板放到左边
- 解决多线程单例模式的线程不安全问题
- php curl简单采集图片生成base64编码(并附curl函数参数说明)
- 对程序员来说, CPU 是什么?
- CentOS安装jdk简单记录
- 商品展示案列
- [Vue.js启航]——主从结构应用构建
- Android数据 存储和访问——商品展示
- datanode 没有启动的原因
- 再见ZXing 使用系统原生代码处理QRCode