core/src/main/java/org/springframework/security/concurrent/DelegatingSecurityContextRunnable.java
public static Runnable create(Runnable delegate, SecurityContext securityContext) {
		Assert.notNull(delegate, "delegate cannot be  null");
		return securityContext == null ? new DelegatingSecurityContextRunnable(delegate)
				: new DelegatingSecurityContextRunnable(delegate, securityContext);
	}
public static Runnable create(Runnable delegate, SecurityContext securityContext) {
		Assert.notNull(delegate, "delegate cannot be  null");
		return securityContext == null ? new DelegatingSecurityContextRunnable(delegate)
				: new DelegatingSecurityContextRunnable(delegate, securityContext);
	}
Factory method for creating a {@link DelegatingSecurityContextRunnable}.

@param delegate the original {@link Runnable} that will be delegated to after
establishing a {@link SecurityContext} on the {@link SecurityContextHolder}. Cannot
have null.
@param securityContext the {@link SecurityContext} to establish before invoking the
delegate {@link Runnable}. If null, the current {@link SecurityContext} from the
{@link SecurityContextHolder} will be used.
@return