Thread createMonitorThread() { monitor = (ServerMonitorRunnable) wrapACC( new ServerMonitorRunnable(), AccessController.getContext(), Thread.currentThread().getContextClassLoader() ); Thread monitorThread = new Thread( monitor, "cluster-" + serverId.getClusterId() + "-" + serverId.getAddress() ); monitorThread.setDaemon( true ); return monitorThread; } private Runnable wrapACC( final Runnable monitor, final AccessControlContext context, final ClassLoader contextClassLoader ) { return new Runnable() { public void run() { AccessController.doPrivileged( new PrivilegedAction() { public Void run() { Thread.currentThread().setContextClassLoader( contextClassLoader ); monitor.run(); return null; } }, context ); } }; }