网站建设怎么做呢计算机网站建设教程
网站建设怎么做呢,计算机网站建设教程,网站优化 前端怎么做,厅门户网站建设首先#xff0c;单例模式分为饿汉模式和懒汉模式 单例模式有什么用呢? 可以保证在程序运行过程中#xff0c;一个类只有一个实例#xff0c;而且该实例易于供外界访问#xff0c;从而方便的控制了实例个数#xff0c;并节约系统资源。 例如#xff1a;DataSource#x…首先单例模式分为饿汉模式和懒汉模式 单例模式有什么用呢? 可以保证在程序运行过程中一个类只有一个实例而且该实例易于供外界访问从而方便的控制了实例个数并节约系统资源。 例如DataSourceJDBC中)类对象只需要一个。 饿汉模式:知道你很饿所以提前给你准备好了于是在类加载的过程中创建实例所以就写在static代码块中和类一起加载。
static class Singleton {private static Singleton singleton new Singleton();private Singleton() {}public static Singleton getSingleton() {return singleton;}}
懒汉模式:知道你很饿但是当你第一次需要的时候我再给你不需要的时候是没有我的实例对象给你调用的这个实例对象通常由方法中创建由方法来返回。
class Singleton {private static Singleton singleton null;private Singleton() {}public static Singleton getSingleton() {if (singleton null) {singleton new Singleton();}return singleton;}
}
其中很关键的一步是private Singleton() {}这一句代码让其他类没法调用它的构造方法。 因为饿汉模式提前创建好了所以天生就是线程安全的。
而懒汉模式是需要才创建那么多个线程中同时需要会怎么办会不会出现线程安全问题?
会的,如果多个线程中同时调用getSingleton方法那么就有可能同时创建出多个实例对象。
那么怎么解决这个线程安全问题呢?
使用synchronized关键字
public synchronized static Singleton getSingleton() {if (singleton null) {singleton new Singleton();}return singleton;}
能不能再改进一下?
为了解决线程安全性的可见性问题,使用volatile关键字
另外,再使用双重if语句判断,降低锁竞争的频率
private static volatile Singleton singleton null;public static Singleton getSingleton() {if (singleton null) {synchronized (Singleton.class) {if (singleton null) {singleton new Singleton();}}}return singleton;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87519.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!