Пример #1
0
  /**
   * Initializes a new, existing Thread object with a runnable object, the given name and belonging
   * to the ThreadGroup passed as parameter. This is the method that the several public constructors
   * delegate their work to.
   *
   * @param group ThreadGroup to which the new Thread will belong
   * @param runnable a java.lang.Runnable whose method <code>run</code> will be executed by the new
   *     Thread
   * @param threadName Name for the Thread being created
   * @param stackSize Platform dependent stack size
   * @throws IllegalThreadStateException if <code>group.destroy()</code> has already been done
   * @see java.lang.ThreadGroup
   * @see java.lang.Runnable
   */
  private void create(ThreadGroup group, Runnable runnable, String threadName, long stackSize) {
    Thread currentThread = Thread.currentThread();
    if (group == null) {
      group = currentThread.getThreadGroup();
    }

    if (group.isDestroyed()) {
      throw new IllegalThreadStateException("Group already destroyed");
    }

    this.group = group;

    synchronized (Thread.class) {
      id = ++Thread.count;
    }

    if (threadName == null) {
      this.name = "Thread-" + id;
    } else {
      this.name = threadName;
    }

    this.target = runnable;
    this.stackSize = stackSize;

    this.priority = currentThread.getPriority();

    this.contextClassLoader = currentThread.contextClassLoader;

    // Transfer over InheritableThreadLocals.
    if (currentThread.inheritableValues != null) {
      inheritableValues = new ThreadLocal.Values(currentThread.inheritableValues);
    }

    // add ourselves to our ThreadGroup of choice
    this.group.addThread(this);
  }