mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-09 07:35:49 +00:00
8047149: Enhance thread contexts in core libraries
Reviewed-by: alanb
This commit is contained in:
parent
d81fa0fe0a
commit
b6eef64a98
@ -28,6 +28,7 @@ package java.lang.ref;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.security.AccessController;
|
||||
import sun.misc.JavaLangAccess;
|
||||
import sun.misc.ManagedLocalsThread;
|
||||
import sun.misc.SharedSecrets;
|
||||
import sun.misc.VM;
|
||||
|
||||
@ -126,7 +127,7 @@ final class Finalizer extends FinalReference<Object> { /* Package-private; must
|
||||
for (ThreadGroup tgn = tg;
|
||||
tgn != null;
|
||||
tg = tgn, tgn = tg.getParent());
|
||||
Thread sft = new Thread(tg, proc, "Secondary finalizer");
|
||||
Thread sft = new ManagedLocalsThread(tg, proc, "Secondary finalizer");
|
||||
sft.start();
|
||||
try {
|
||||
sft.join();
|
||||
@ -185,7 +186,7 @@ final class Finalizer extends FinalReference<Object> { /* Package-private; must
|
||||
}}});
|
||||
}
|
||||
|
||||
private static class FinalizerThread extends Thread {
|
||||
private static class FinalizerThread extends ManagedLocalsThread {
|
||||
private volatile boolean running;
|
||||
FinalizerThread(ThreadGroup g) {
|
||||
super(g, "Finalizer");
|
||||
|
||||
@ -27,6 +27,7 @@ package java.lang.ref;
|
||||
|
||||
import sun.misc.Cleaner;
|
||||
import sun.misc.JavaLangRefAccess;
|
||||
import sun.misc.ManagedLocalsThread;
|
||||
import sun.misc.SharedSecrets;
|
||||
|
||||
/**
|
||||
@ -126,7 +127,7 @@ public abstract class Reference<T> {
|
||||
|
||||
/* High-priority thread to enqueue pending References
|
||||
*/
|
||||
private static class ReferenceHandler extends Thread {
|
||||
private static class ReferenceHandler extends ManagedLocalsThread {
|
||||
|
||||
private static void ensureClassInitialized(Class<?> clazz) {
|
||||
try {
|
||||
|
||||
@ -82,8 +82,7 @@ public class GC {
|
||||
*/
|
||||
public static native long maxObjectInspectionAge();
|
||||
|
||||
|
||||
private static class Daemon extends Thread {
|
||||
private static class Daemon extends ManagedLocalsThread {
|
||||
|
||||
public void run() {
|
||||
for (;;) {
|
||||
|
||||
@ -34,6 +34,10 @@ public class ManagedLocalsThread extends Thread {
|
||||
private static final long THREAD_LOCALS;
|
||||
private static final long INHERITABLE_THREAD_LOCALS;
|
||||
|
||||
public ManagedLocalsThread() {
|
||||
eraseThreadLocals();
|
||||
}
|
||||
|
||||
public ManagedLocalsThread(Runnable target) {
|
||||
super(target);
|
||||
eraseThreadLocals();
|
||||
@ -44,6 +48,11 @@ public class ManagedLocalsThread extends Thread {
|
||||
eraseThreadLocals();
|
||||
}
|
||||
|
||||
public ManagedLocalsThread(ThreadGroup group, String name) {
|
||||
super(group, name);
|
||||
eraseThreadLocals();
|
||||
}
|
||||
|
||||
public ManagedLocalsThread(ThreadGroup group, Runnable target, String name) {
|
||||
super(group, target, name);
|
||||
eraseThreadLocals();
|
||||
|
||||
@ -77,7 +77,7 @@ public class RequestProcessor implements Runnable {
|
||||
*/
|
||||
public static synchronized void startProcessing() {
|
||||
if (dispatcher == null) {
|
||||
dispatcher = new Thread(new RequestProcessor(), "Request Processor");
|
||||
dispatcher = new ManagedLocalsThread(new RequestProcessor(), "Request Processor");
|
||||
dispatcher.setPriority(Thread.NORM_PRIORITY + 2);
|
||||
dispatcher.start();
|
||||
}
|
||||
|
||||
@ -213,7 +213,7 @@ public final class Signal {
|
||||
}
|
||||
};
|
||||
if (handler != null) {
|
||||
new Thread(runnable, sig + " handler").start();
|
||||
new ManagedLocalsThread(runnable, sig + " handler").start();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ import java.lang.ref.WeakReference;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import sun.misc.JavaAWTAccess;
|
||||
import sun.misc.ManagedLocalsThread;
|
||||
import sun.misc.SharedSecrets;
|
||||
|
||||
/**
|
||||
@ -248,7 +249,7 @@ public class LogManager {
|
||||
|
||||
// This private class is used as a shutdown hook.
|
||||
// It does a "reset" to close all open handlers.
|
||||
private class Cleaner extends Thread {
|
||||
private class Cleaner extends ManagedLocalsThread {
|
||||
|
||||
private Cleaner() {
|
||||
/* Set context class loader to null in order to avoid
|
||||
|
||||
@ -31,6 +31,7 @@ import java.util.Iterator;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
import java.lang.ref.WeakReference;
|
||||
import sun.misc.ManagedLocalsThread;
|
||||
|
||||
|
||||
/*
|
||||
@ -343,7 +344,7 @@ class MacOSXPreferencesFile {
|
||||
{
|
||||
if (timer == null) {
|
||||
timer = new Timer(true); // daemon
|
||||
Thread flushThread = new Thread() {
|
||||
Thread flushThread = new ManagedLocalsThread() {
|
||||
@Override
|
||||
public void run() {
|
||||
flushWorld();
|
||||
|
||||
@ -29,6 +29,7 @@ import java.util.*;
|
||||
import java.io.*;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import sun.misc.ManagedLocalsThread;
|
||||
// These imports needed only as a workaround for a JavaDoc bug
|
||||
import java.lang.Integer;
|
||||
import java.lang.Long;
|
||||
@ -1470,7 +1471,7 @@ public abstract class AbstractPreferences extends Preferences {
|
||||
* A single background thread ("the event notification thread") monitors
|
||||
* the event queue and delivers events that are placed on the queue.
|
||||
*/
|
||||
private static class EventDispatchThread extends Thread {
|
||||
private static class EventDispatchThread extends ManagedLocalsThread {
|
||||
public void run() {
|
||||
while(true) {
|
||||
// Wait on eventQueue till an event is present
|
||||
|
||||
@ -30,7 +30,7 @@ import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.security.PrivilegedActionException;
|
||||
|
||||
import sun.misc.ManagedLocalsThread;
|
||||
import sun.util.logging.PlatformLogger;
|
||||
|
||||
/**
|
||||
@ -450,7 +450,7 @@ class FileSystemPreferences extends AbstractPreferences {
|
||||
// Add shutdown hook to flush cached prefs on normal termination
|
||||
AccessController.doPrivileged(new PrivilegedAction<Void>() {
|
||||
public Void run() {
|
||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||
Runtime.getRuntime().addShutdownHook(new ManagedLocalsThread() {
|
||||
public void run() {
|
||||
syncTimer.cancel();
|
||||
syncWorld();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user