首页 > 代码库 > 单例模式
单例模式
Singleton
一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。
实现方式1:
public class SingletonClass{ //内部产生该类唯一的实例,并对外界不可见 private static final SingletonClass MyInstance = new SingletonClass(); //私有的构造函数,防止被外界实例化 private SingletonClass(){ } //返回唯一实例的静态方法,供外界调用 public static SingletonClass getInstance(){ return MyInstance; } }
---
实现方式2:
public class SingletonClass2{ //私有的构造函数,防止被外界实例化 private SingletonClass2(){ } //静态内部类执行一次,保证线程安全 private static class InstanceHolder{ private static final SingletonClass2 MyInstance = new SingletonClass2(); } //返回唯一实例的静态方法,供外界调用 public static SingletonClass2 getInstance(){ return InstanceHolder.MyInstance; } }
---
测试类:
class SingletonTest implements Runnable { //倒计锁 private static CountDownLatch latch = new CountDownLatch(1); //线程安全的Set static Set<String> set = new ConcurrentSkipListSet<String>(); @Override public void run() { try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } set.add(SingletonClass2.getInstance().toString()); } public static void main(String[] args) throws Exception { for (int k = 0; k < 2000; k++) { SingletonTest tt = new SingletonTest(); Thread t = new Thread(tt); t.start(); } //释放锁 latch.countDown(); Thread.sleep(2000); System.out.println(set.size()); } }
---
输出:
1
说明只有一个类的实例。
end
单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。