Created
April 25, 2017 13:24
-
-
Save Van1996/487a56f7afb9a265bebd6bf832b8532f to your computer and use it in GitHub Desktop.
Thread类的init() 方法(JDK 1.8)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Initializes a Thread. | |
* | |
* @param g the Thread group | |
* @param target the object whose run() method gets called | |
* @param name the name of the new Thread | |
* @param stackSize the desired stack size for the new thread, or | |
* zero to indicate that this parameter is to be ignored. | |
* @param acc the AccessControlContext to inherit, or | |
* AccessController.getContext() if null | |
* @param inheritThreadLocals if {@code true}, inherit initial values for | |
* inheritable thread-locals from the constructing thread | |
*/ | |
private void init(ThreadGroup g, Runnable target, String name, | |
long stackSize, AccessControlContext acc, | |
boolean inheritThreadLocals) { | |
if (name == null) { | |
throw new NullPointerException("name cannot be null"); | |
} | |
this.name = name; | |
Thread parent = currentThread(); | |
SecurityManager security = System.getSecurityManager(); | |
if (g == null) { | |
/* Determine if it's an applet or not */ | |
/* If there is a security manager, ask the security manager | |
what to do. */ | |
if (security != null) { | |
g = security.getThreadGroup(); | |
} | |
/* If the security doesn't have a strong opinion of the matter | |
use the parent thread group. */ | |
if (g == null) { | |
g = parent.getThreadGroup(); | |
} | |
} | |
/* checkAccess regardless of whether or not threadgroup is | |
explicitly passed in. */ | |
g.checkAccess(); | |
/* | |
* Do we have the required permissions? | |
*/ | |
if (security != null) { | |
if (isCCLOverridden(getClass())) { | |
security.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION); | |
} | |
} | |
g.addUnstarted(); | |
this.group = g; | |
this.daemon = parent.isDaemon(); | |
this.priority = parent.getPriority(); | |
if (security == null || isCCLOverridden(parent.getClass())) | |
this.contextClassLoader = parent.getContextClassLoader(); | |
else | |
this.contextClassLoader = parent.contextClassLoader; | |
this.inheritedAccessControlContext = | |
acc != null ? acc : AccessController.getContext(); | |
this.target = target; | |
setPriority(priority); | |
if (inheritThreadLocals && parent.inheritableThreadLocals != null) | |
this.inheritableThreadLocals = | |
ThreadLocal.createInheritedMap(parent.inheritableThreadLocals); | |
/* Stash the specified stack size in case the VM cares */ | |
this.stackSize = stackSize; | |
/* Set thread ID */ | |
tid = nextThreadID(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment