I want to have a resettable object instance for a session within my program that is thread safe, an example of a session might be a logged in user session.
I am currently doing something like this;
  public final class ObjectFactory {
    private static volatile NativeObjectWrapper instance = null;
    private Singleton() {}
    public static NativeObjectWrapper getInstance() {
        if (instance == null) {
            synchronized(ObjectFactory.class) {
                if (instance == null) {
                    instance = new NativeObjectWrapper(AuthData);
                }
            }
        }
        return instance;
    }
    public void reset() {
      synchronized(ObjectFactory.class) {
        instance = null;
      }
    }
  }
I want to have the object created lazily, with the ability to reset it. Is the above approach threadsafe? if not is there a common pattern to solve this?
An example again would be that scoped object here has some inner data based on the user session and therefore should be a new instance per user session.
 
     
    