Tag: singleton

Singleton lazy vs eager instantiation

如果单个实现如下, class Singleton { private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } } 这种实现与延迟初始化方法有何不同? 在这种情况下,将在加载类时创建实例,并且仅在第一次活动使用时加载类本身(例如,当您声明Singleton singleton = null时,不会加载Singleton.getInstance();) 即使使用延迟初始化方法,也会在调用getInstance()时创建实例 我错过了什么吗?

单身和exception

什么是设计可能抛出exception的单例类的最佳方法? 在这里,我有一个Singleton(使用Bill Pugh的方法,在Wiki for Singleton中记录)。 private static class SingletonObjectFactoryHolder{ //1 private static final ObjectFactory INSTANCE = new ObjectFactory(); } private ObjectFactory() throws Exception{ //2 //create the factory } public static ObjectFactory getInstance(){ //3 return SingletonObjectFactoryHolder.INSTANCE; } 如果在2处抛出exception,我想将其传播给调用者。 但是,我不能从第1行抛出exception。 那么,如果没有正确创建单例对象,我唯一的选择是返回一个空对象吗? 谢谢 PS我确实意识到如果它通过不同的类加载器加载或者如果reflection性地加载,这个Singleton可能会破坏,但它对我的目的来说已经足够了。 // UPDATE 我很好奇,我可以不重新安排我的设计,如下所示抛出exception吗? 此外,我不需要任何同步(类加载器保证静态内部类只加载一次,并且仅在调用getInstance()时)。 因此,线程安全和懒惰实例化? private static class SingletonObjectFactoryHolder{ //1 public static ObjectFactory getInstance() […]

自Java 5以来最好的单例模式

从Java 5开始,据说创建单例的最佳方法是使用单元素枚举类型。 例: public enum SuperSingleton implements Zooma{ INSTANCE; /** */ public void fightTheBattle(){ System.out.println(“I am fighting the battle!!!”); } @Override public void runningWild() { //This is method implemented from the Zooma interface. } } 根据Joshua Bloch的说法,单元素枚举单例是; 更简洁 免费提供序列化机器 并提供反对多实例化的铁定。 我可以看到它是如何更简洁,它如何提供反对多实例化的铁定, 但它如何免费提供序列化机制? 作为一个枚举,这是单身人士得到的东西吗?

枚举,单身人士和反序列化

枚举被认为是单身人士的最佳方式,其中一个原因是它隐式inheritance了Serializable 。 但是enums如何防止单身人员的反序列化问题?

如何编写Java EE / EJB Singleton?

前一天,我的应用程序是一个EAR,包含一个WAR,一个EJB JAR和几个实用程序JAR文件。 我在其中一个实用程序文件中有一个POJO单例类,它工作正常,并且全世界都很好: EAR |— WAR |— EJB JAR |— Util 1 JAR |— Util 2 JAR |— etc. 然后我创建了第二个WAR,并发现(艰难的方式)每个WAR都有自己的ClassLoader,因此每个WAR都会看到不同的单例,并且事情从那里分解。 这不太好。 EAR |— WAR 1 |— WAR 2 |— EJB JAR |— Util 1 JAR |— Util 2 JAR |— etc. 所以,我正在寻找一种方法来创建一个可以跨WAR运行的Java单例对象(跨ClassLoaders?)。 在我发现JBoss 5.1似乎不支持该注释(作为EJB 3.1的一部分添加)之前,@ @Singleton EJB注释似乎很有希望。 我错过了什么 – 我可以将@Singleton与JBoss 5.1一起使用吗? 目前无法升级到JBoss AS 6。 或者,我很高兴不必使用EJB来实现我的单例。 […]

如何在Java中实现抽象的单例类?

这是我的示例抽象单例类: public abstract class A { protected static A instance; public static A getInstance() { return instance; } //…rest of my abstract methods… } 以下是具体实施: public class B extends A { private B() { } static { instance = new B(); } //…implementations of my abstract methods… } 不幸的是我无法在B类中获取静态代码来执行,因此实例变量永远不会被设置。 我试过这个: Class c = B.class; A.getInstance() […]

ScopedProxy如何决定使用哪个Session?

Singleton不能自动assemblySessionBean,但ScopedProxy可以。 假设100个用户在同一个应用程序中同时拥有一个有效的Session,那么ScopedProxy如何决定会话的含义? 我不认为ScopedProxy正在选择任何随机会话,这在我看来是无稽之谈。 ScopedProxy如何决定使用哪个会话? 如果0个用户有会话怎么办? 会发生NullPointerException吗? @Async是一个不同的线程而不是调用Request-Processing-Thread如何将HttpRequest-Context注入Async任务?

Guice单身人士是否尊重线程限制?

我对Guice以及它的单身人士是否会服从我可能尝试设置的线程限制表示关注: public class CacheModule extends AbstractModule { @Override protected void configure() { // WidgetCache.class is located inside a 3rd party JAR that I // don’t have the ability to modify. WidgetCache widgetCache = new WidgetCache(…lots of params); // Guice will reuse the same WidgetCache instance over and over across // multiple calls to Injector#getInstance(WidgetCache.class); bind(WidgetCache.class).toInstance(widgetCache); […]

如何创建JVM全局Singleton?

我从这个stackoverflow问题中汲取灵感 如何创建一个保证仅对整个JVM进程可用一次的Java类实例? 然后,在该JVM上运行的每个应用程序都应该能够使用该单例实例。

如何初始化基于Java枚举的Singleton?

如果我必须在使用该对象之前初始化它,那么初始化基于java enum的单例的正确方法是什么。 我已经开始编写代码,但我不确定我是否做得对。 你能帮我实现这个单身对我好吗? public enum BitCheck { INSTANCE; private static HashMap props = null; public synchronized void initialize(HashMap properties) { if(props == null) { props = properties; } } public boolean isAenabled(){ return “Y”.equalsIgnoreCase(props.get(“A_ENABLED”)); } public boolean isBenabled(){ return “Y”.equalsIgnoreCase(props.get(“B_ENABLED”)); } }