Tag: singleton

Singleton中的线程安全性

我知道Java中的双重锁定已被破坏,那么在Java中使单例线程安全的最佳方法是什么? 我想到的第一件事是: class Singleton{ private static Singleton instance; private Singleton(){} public static synchronized Singleton getInstance(){ if(instance == null) instance = new Singleton(); return instance; } } 这有用吗? 如果是这样,它是最好的方式(我想这取决于具体情况,所以说明特定技术最好的时候会有用)

跨JVM或Application实例或Tomcat实例的单例

如果我在Tomcat(或任何其他服务器)的单个实例上部署并运行相同应用程序的2个实例。 然后将创建一个单独的对象(Singleton类): 跨越Tomcat的单个实例(但对于同一应用程序的2个实例是常见的)或 跨应用程序实例(2个应用程序实例不同) 所以基本上我想要理解的是,每个JVM都会创建一个Singleton类的单个对象吗? 如果应用程序托管在Web服务器(或容器)上,这是如何工作的。

应该何时创建/打开EntityManagerFactory实例?

好的,我阅读了一些文章/示例如何在单例中编写实体管理器工厂。 其中一个对我来说最容易理解: http://javanotepad.blogspot.com/2007/05/jpa-entitymanagerfactory-in-web.html 我了解到EntityManagerFactory(EMF)应该只在应用程序范围内创建一次。 并确保在使用后关闭EMF(?) 所以我编写了EMF helper类来使用的业务方法: public class EmProvider { private static final String DB_PU = “KogaAlphaPU”; public static final boolean DEBUG = true; private static final EmProvider singleton = new EmProvider(); private EntityManagerFactory emf; private EmProvider() {} public static EmProvider getInstance() { return singleton; } public EntityManagerFactory getEntityManagerFactory() { if(emf == null) { […]

使用不同的类加载器进行不同的JUnit测试?

我有一个Singleton / Factory对象,我想为其编写一个JUnit测试。 Factory方法根据类路径上属性文件中的类名决定实例化哪个实现类。 如果未找到属性文件,或者属性文件不包含classname键,则该类将实例化默认实现类。 由于工厂在实例化后保持Singleton的静态实例使用,为了能够在Factory方法中测试“故障转移”逻辑,我需要在不同的类加载器中运行每个测试方法。 有没有办法使用JUnit(或其他unit testing包)来做到这一点? 编辑:这里是一些正在使用的Factory代码: private static MyClass myClassImpl = instantiateMyClass(); private static MyClass instantiateMyClass() { MyClass newMyClass = null; String className = null; try { Properties props = getProperties(); className = props.getProperty(PROPERTY_CLASSNAME_KEY); if (className == null) { log.warn(“instantiateMyClass: Property [” + PROPERTY_CLASSNAME_KEY + “] not found in properties, using default […]