作者热门文章
- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
Hold 方式的单例完全是借助了类加载的特点。
package singleton.singleton3;
// final 不允许继承
public final class Singleton {
// 实例变量
private byte[] data = new byte[1024];
private static Singleton instance = null;
private Singleton() {
System.out.println("+++++");
}
// 在静态内部类中持有 Singleton 的实例,并且可被直接初始化
private static class Holder {
private static Singleton instance = new Singleton();
}
// 向 getInstance 方法加入同步控制,每次只能有一个线程能进入
public static Singleton getInstance() {
return Holder.instance;
}
public static void main(String[] args) {
System.out.println(Singleton.getInstance());
}
}
+++++
singleton.singleton3.Singleton@7a81197d
如果注释掉 System.out.println(Singleton.getInstance()); 则什么都不打印。
在 Singleton 类中并没有 instance 的静态成员,而是将其放入到了静态内部类 Holder 中,并不会创建 Singleton 的实例,Holder 类中定义了 Singleton 的静态方法,并且直接进行了实例化,当 Holder 被主动引用的时候则会创建 Singleton 的实例,Singleton 实例的创建过程在 Java 程序编译时期收集到 <clinit>() 方法中,该方法是同步方法,可以保证内存的可见性、JVM 指令的顺序性和原子性、Holder 方式的单例设计是最好的设计之一,也是目前使用比较广的设计之一。
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!