在singleton中对synchronized的使用
程序员文章站
2022-03-29 22:15:45
...
最近在看JAVA方向的一些东西, 笔者这些年在C, PHP, JAVA等面向对象的语言的使用中,有一些自己的体会。 语言是没有好坏的, 只有使用的场合的合适与否。 没有哪种语言说是可以完全取代别的语言的。 JAVA从出现到现在风靡全球, 有他道理的。 想的有点多的,
最近在看JAVA方向的一些东西, 笔者这些年在C++, PHP, JAVA等面向对象的语言的使用中,有一些自己的体会。
语言是没有好坏的, 只有使用的场合的合适与否。 没有哪种语言说是可以完全取代别的语言的。
JAVA从出现到现在风靡全球, 有他道理的。
想的有点多的, 本文主要是针对在现在的项目中一个同事写的Singleton模式对synchronized使用的一些自己的理解。
先上他写的code,
public class DBConnPool{ private static DBConnPool instance = null; public synchronized static DBConnPool getInstance() { if (instance == null) { try { String modbase = System.getenv("DM_HOME"); modbase = modbase != null ? modbase : "."; String dbcfg = modbase + File.separator + "conf" + File.separator + "dbcfg.xml"; instance = new DBConnPool(dbcfg); } catch (Exception e) { LOG.fatal("create connection pool instance failed", e); } } return instance; } }
java synchronized详解
。笔者比较推荐使用synchronized 块而不是synchronized 方法。
public class Singleton{ private static volatile Singleton _instance; public static Singleton getInstance(){ if(_instance == null){ synchronized(Singleton.class){ if(_instance == null) _instance = new Singleton(); } } return _instance; }
这样的话, 在多线程环境中, 对getInstance的访问就不会被blocked, 而是仅当_instance为null时, 需要创建时, 才要block其他的线程。
这样可以提高系统的效率。
推荐阅读
-
使用加载图片解决在Ajax数据加载中页面出现短暂空白的问题
-
在weex中愉快的使用scss的方法步骤
-
深入剖析Ruby设计模式编程中对命令模式的相关使用
-
在Laravel5.2中,如何直接使用Auth包里的方法进行直接注册用户呢?
-
在SQL 2012中使用和Oracle 一样的序列
-
对layui中的onevent 和event的使用详解
-
使用distinct在mysql中查询多条不重复记录值的解决办法
-
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
-
详细介绍Session在PHP中的使用(1)
-
微服务统计,分析,图表,监控一体化的HttpReports项目在.Net Core 中的使用