使用枚举控制实例

时间:2015-10-26 19:50:02

标签: java multithreading

我有一个工厂类,我用enum制作了单例。我想确保正在创建的对象也是单例(请注意我不拥有正在创建的类,但我想确保它的对象是单例)。

我正在尝试这样的事情

public enum MyFactoryImpl implements MyFactory {
    INSTANCE;
    private final MyObject myObject = buildMyObject(); //I want to instance control this

    private MyObject buildMyObject() {

         return new MyObject();
    }

    public MyObject myFactoryMethod() {
        return this.myObject;   
    }
}

我尝试使用testNG以并行方式在测试用例中调用factoryMethod,并且多次调用似乎返回相同的hashCode。

@Test(threadPoolSize = 10, invocationCount = 600, timeOut = 100000)
public void test_instanceControlledBehavior() {
    final MyFactory f1 = MyFactoryImpl.INSTANCE;
    final MyFactory f2 = MyFactoryImpl.INSTANCE;
    Assert.assertEquals(f1.myFactoryMethod().hashCode(), f2.myFactoryMethod().hashCode()); 
}

这是实施行为的正确方法吗?有没有更好的方法可以实例控制' MyObject'?

0 个答案:

没有答案