java 多线程-单例模式
发布时间:2020-12-15 08:00:53 所属栏目:Java 来源:网络整理
导读:单例模式 对外只有一个对象,对内不管,比如每台电脑都只有一个的任务管理器 1、构造去私有化 2、内部提供私有静态属性--存储对象的地址 3、提供公共的静态方法访--获取属性 public class my {//2、提供私有静态属性private volatile static my instance; //
单例模式
对外只有一个对象,对内不管,比如每台电脑都只有一个的任务管理器 1、构造去私有化 2、内部提供私有静态属性--存储对象的地址 3、提供公共的静态方法访--获取属性 public class my { //2、提供私有静态属性 private volatile static my instance; //避免new对象时指令重排 //1、构造器私有化 private my(){ } //3、提供公共静态方法访问属性 public static my getInstance() { if(null!=instance) //如果已经创建好对象,则不需要多个线程等待创建对象 { return instance; } synchronized(my.class) //绑定类的模子 { if(null==instance) //多线程可能创建多个对象,加入同步 { instance=new my();//可能发生指令重排 //new对象发生:1、开辟空间2、初始化对象信息3、返回对象的地址给引用instance //过程很慢,可能第三步会提前于第二步,a线程可能在初始化信息的时候 ,b线程可能已经拿到对象 //加入voliatle避免这种情况 } } return instance; } public static void main(String[]args) throws InterruptedException { //打印对象地址,检验单例模式是否成功 Thread t=new Thread(()->{ System.out.println(my.getInstance()); }); t.start(); System.out.println(my.getInstance()); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 应该始终使用Java中的接口声明变量吗?
- java – 使用基类实例在派生类中访问的受保护成员
- Java Spring JPA FetchMode.JOIN不使用JOIN
- java – Spring LDAP NullPointerException
- Java Map.isEmpty()方法:判断Map集合对象是否包含内容
- Java NIO框架Netty简单使用的示例
- java – HashMap中的NULL键的Hashcode
- java.lang.Exception:未指定证书文件或文件格式无效
- 六、垃圾回收_判断对象是否存活算法_引用计数法详解
- JavaFx:如何使用scenebuilder制作可点击的图像