aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang/Thread.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/lang/Thread.java')
-rw-r--r--libjava/java/lang/Thread.java27
1 files changed, 23 insertions, 4 deletions
diff --git a/libjava/java/lang/Thread.java b/libjava/java/lang/Thread.java
index 84682f3..1e1e860 100644
--- a/libjava/java/lang/Thread.java
+++ b/libjava/java/lang/Thread.java
@@ -355,7 +355,7 @@ public class Thread implements Runnable
*/
public Thread(ThreadGroup group, Runnable target, String name)
{
- this(currentThread(), group, target, name);
+ this(currentThread(), group, target, name, false);
}
/**
@@ -381,10 +381,26 @@ public class Thread implements Runnable
public Thread(ThreadGroup group, Runnable target, String name, long size)
{
// Just ignore stackSize for now.
- this(currentThread(), group, target, name);
+ this(currentThread(), group, target, name, false);
}
- private Thread (Thread current, ThreadGroup g, Runnable r, String n)
+ /**
+ * Allocate a new Thread object for threads used internally to the
+ * run time. Runtime threads should not be members of an
+ * application ThreadGroup, nor should they execute arbitrary user
+ * code as part of the InheritableThreadLocal protocol.
+ *
+ * @param name the name for the Thread
+ * @param noInheritableThreadLocal if true, do not initialize
+ * InheritableThreadLocal variables for this thread.
+ * @throws IllegalThreadStateException if group is destroyed
+ */
+ Thread(String name, boolean noInheritableThreadLocal)
+ {
+ this(null, null, null, name, noInheritableThreadLocal);
+ }
+
+ private Thread (Thread current, ThreadGroup g, Runnable r, String n, boolean noInheritableThreadLocal)
{
// Make sure the current thread may create a new thread.
checkAccess();
@@ -424,7 +440,10 @@ public class Thread implements Runnable
int pri = current.getPriority();
priority = (gmax < pri ? gmax : pri);
contextClassLoader = current.contextClassLoader;
- InheritableThreadLocal.newChildThread(this);
+ // InheritableThreadLocal allows arbitrary user code to be
+ // executed, only do this if our caller desires it.
+ if (!noInheritableThreadLocal)
+ InheritableThreadLocal.newChildThread(this);
}
else
{