单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式又分很多种,必须饿汉式,懒汉式,登记式。
那么我们如何创建一个单例模式类,并且他也是线程安全的,我们首先想到的就是饿汉式,因为他是线程安全的
见以下代码
public class account { private account(){ } /* * 创建一个线程安全的单例类 * 线程安全: * 你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。 * 如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的。 * 就是线程安全的 * 饿汉单例是天生的线程安全 */ private static final account ac = new account(); public static account getAccount(){ return ac; } public void getName(String name){ System.out.println("hello "+name); } }
测试类:
public class demo { public static void main(String[] args) { account ac1 = account.getAccount(); ac1.getName("李华"); account ac2 = account.getAccount(); ac2.getName("王华"); if(ac1 == ac2){ System.out.println("创建的是同一个类哦"); }else{ System.out.println("创建的不是同一个类哦"); } } }这里我们最后打印出的结果是“创建的是同一个类哦”
下面说说懒汉式。懒汉式,他是在get方法里面实例化了当前对象
//懒汉式,顾名思义,它比较懒,最后在方法里面创建 private static account ac = null; public static account getAccount(){ if(ac == null){ ac = new account(); } return ac; }在多线程里,为了线程安全我们必须用synchronized关键字锁定
如:synchronized关键字 public static synchronized account getAccount()
只要符合线程安全都可以。
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情