code: public ConfigurableApplicationContext run(String... args) {
  		if (this.running.get()) {
  			// If already created we just return the existing context
  			return this.context;
  		}
  		configureAsChildIfNecessary(args);
  		if (this.running.compareAndSet(false, true)) {
  			synchronized (this.running) {
  				// If not already running copy the sources over and then run.
  				this.context = build().run(args);
  			}
  		}
  		return this.context;
  	}
docs: Create an application context (and its parent if specified) with the command line
  args provided. The parent is run first with the same arguments if has not yet been
  started.
  @param args the command line arguments
  @return an application context created from the current state