|
Java example source code file (NewThreadAction.java)
The NewThreadAction.java Java example source code/* * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package sun.rmi.runtime; import java.security.AccessController; import java.security.PrivilegedAction; import sun.security.util.SecurityConstants; /** * A PrivilegedAction for creating a new thread conveniently with an * AccessController.doPrivileged construct. * * All constructors allow the choice of the Runnable for the new * thread to execute, the name of the new thread (which will be * prefixed with "RMI "), and whether or not it will be a daemon * thread. * * The new thread may be created in the system thread group (the root * of the thread group tree) or an internally created non-system * thread group, as specified at construction of this class. * * The new thread will have the system class loader as its initial * context class loader (that is, its context class loader will NOT be * inherited from the current thread). * * @author Peter Jones **/ public final class NewThreadAction implements PrivilegedAction<Thread> { /** cached reference to the system (root) thread group */ static final ThreadGroup systemThreadGroup = AccessController.doPrivileged(new PrivilegedAction<ThreadGroup>() { public ThreadGroup run() { ThreadGroup group = Thread.currentThread().getThreadGroup(); ThreadGroup parent; while ((parent = group.getParent()) != null) { group = parent; } return group; } }); /** * special child of the system thread group for running tasks that * may execute user code, so that the security policy for threads in * the system thread group will not apply */ static final ThreadGroup userThreadGroup = AccessController.doPrivileged(new PrivilegedAction<ThreadGroup>() { public ThreadGroup run() { return new ThreadGroup(systemThreadGroup, "RMI Runtime"); } }); private final ThreadGroup group; private final Runnable runnable; private final String name; private final boolean daemon; NewThreadAction(ThreadGroup group, Runnable runnable, String name, boolean daemon) { this.group = group; this.runnable = runnable; this.name = name; this.daemon = daemon; } /** * Creates an action that will create a new thread in the * system thread group. * * @param runnable the Runnable for the new thread to execute * * @param name the name of the new thread * * @param daemon if true, new thread will be a daemon thread; * if false, new thread will not be a daemon thread */ public NewThreadAction(Runnable runnable, String name, boolean daemon) { this(systemThreadGroup, runnable, name, daemon); } /** * Creates an action that will create a new thread. * * @param runnable the Runnable for the new thread to execute * * @param name the name of the new thread * * @param daemon if true, new thread will be a daemon thread; * if false, new thread will not be a daemon thread * * @param user if true, thread will be created in a non-system * thread group; if false, thread will be created in the system * thread group */ public NewThreadAction(Runnable runnable, String name, boolean daemon, boolean user) { this(user ? userThreadGroup : systemThreadGroup, runnable, name, daemon); } public Thread run() { SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); } Thread t = new Thread(group, runnable, "RMI " + name); t.setContextClassLoader(ClassLoader.getSystemClassLoader()); t.setDaemon(daemon); return t; } } Other Java examples (source code examples)Here is a short list of links related to this Java NewThreadAction.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.