JAVA单例模式(线程安全,高并发性能又高)
利用锁的原理,来比较一下四种单例模式。
第一种:线程不安全,不正确
1 class Singleton { 2 3 private static Singleton instance; 4 5 private Singleton() { 6 7 } 8 9 public static Singleton getInstance() { 10 11 if (instance == null) { 12 13 instance = new Singleton(); 14 } 15 16 return instance; 17 } 18 }
第二种:线程安全,但是高并发性能不是很高
1 class Singleton { 2 3 private static Singleton instance; 4 5 private Singleton() { 6 7 } 8 9 public static synchronized Singleton getInstance() { 10 11 if (instance == null) { 12 13 instance = new Singleton(); 14 } 15 16 return instance; 17 } 18 }
第三种:线程安全,性能又高,这种写法最常见。
1 class Singleton { 2 3 private static Singleton instance; 4 private static byte[] lock = new byte[0]; 5 6 private Singleton() { 7 8 } 9 10 public static Singleton getInstance() { 11 12 if (instance == null) { 13 14 synchronized (lock) { 15 instance = new Singleton(); 16 } 17 } 18 19 return instance; 20 } 21 }
第四种:线程安全,性能又高,这种写法也最为常见。
1 class Singleton { 2 3 private static Singleton instance; 4 private static ReentrantLock lock = new ReentrantLock(); 5 6 private Singleton() { 7 8 } 9 10 public static Singleton getInstance() { 11 12 if (instance == null) { 13 14 lock.lock(); 15 if (instance == null) { 16 instance = new Singleton(); 17 } 18 lock.unlock(); 19 } 20 21 return instance; 22 } 23 }
更多线程安全链接:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步