工厂级线程安全

Sub*_*dal 0 java multithreading

我有一个工厂类,假设通过调用方法ApppleFactory创建一个新实例.只有一个共享实例.ApplegetApple()ApppleFactory

class ApppleFactory {
    private static Apple apple = null;

    private ApppleFactory() {
    }

    public static Apple getApple() {
        apple = new Apple();
        //do some other work on this apple instance
        return apple; //finally return it
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果多个线程访问它getApple()并使用这个可变数据, apple则可能存在不安全的可能性.如何克服这个问题?

Old*_*eon 7

显然,这个static领域就是问题所在.摆脱它.

class ApppleFactory {
    public Apple getApple() {
        Apple apple = new Apple();
        //do some other work on this apple instance
        return apple; //finally return it
    }
}
Run Code Online (Sandbox Code Playgroud)