Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4211687

(spec thread) Thread does not belong to the correct ThreadGroup

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P4
    • Resolution: Cannot Reproduce
    • Affects Version/s: 1.1.7
    • Fix Version/s: None
    • Component/s: core-libs
    • Labels:
    • Subcomponent:
    • CPU:
      generic
    • OS:
      generic

      Description



      Name: dbT83986 Date: 02/15/99


      According to the Spec's at the URL below. When a new Thread is started and
      ThreadGroup is not specified. Then the Thread should belong to the Parent's Thread Group.

      http://java.sun.com/docs/books/jls/html/javalang.doc18.html#2658

      This is not true in
      JDK1.1.6, JDK1.1.7, JDK1.1.7A, JDK1.2 RC1

      Steps to recreate
      1. compile Applet1.java
      2. Set Empty CLASSPATH
      3. use appletviewer to view Applet1.html

      The cause of the problem is in Thread.java. If parameter ThreadGroup g is null
      Then we should *ALWAYS* use parent.getThreadGroup() as the ThreadGroup for
      this thread, irrespective of SecurityManager is set or not.

          private void init(ThreadGroup g, Runnable target, String name){
      Thread parent = currentThread();
      if (g == null) {
      /* Determine if it's an applet or not */
      SecurityManager security = System.getSecurityManager();

      /* If there is a security manager, ask the security manager
      what to do. */
      if (security != null) {
      g = security.getThreadGroup();
      }

      /* If the security doesn't have a strong opinion of the matter
      use the parent thread group. */
      if (g == null) {
      g = parent.getThreadGroup();
      }
      }

      /* checkAccess regardless of whether or not threadgroup is
                 explicitly passed in. */
      g.checkAccess();

      >>>> this.group = g;
      this.daemon = parent.isDaemon();
      this.priority = parent.getPriority();
      this.name = name.toCharArray();
      this.target = target;
      setPriority(priority);
      g.add(this);
          }



      Here's the source
      ------------------Applet1.java-------------------
      import java.awt.*;
      import java.applet.*;
      import java.lang.*;

      public class Applet1 extends Applet
      {
      public void init()
      {
      setLayout(null);
      setSize(426,266);
      ThreadGroup group = new ThreadGroup("Group 1");
      ThreadA threadA = new ThreadA();
      new Thread(group,threadA).start();
      }
      }

      class ThreadA implements Runnable {
      public void run(){
      System.out.println("Thread Group for ThreadA : " + Thread.currentThread().getThreadGroup());
      ThreadB threadB = new ThreadB();
      new Thread(threadB).start();
      }
      }

      class ThreadB implements Runnable {
      public void run(){
      System.out.println("Thread Group for ThreadB : " + Thread.currentThread().getThreadGroup());
      }
      }
      ----------------------Applet1.html---------------
      <HTML>
      <HEAD>
      <TITLE>Autogenerated HTML</TITLE>
      </HEAD>
      <BODY>
      <APPLET CODE="Applet1.class" WIDTH=430 HEIGHT=270></APPLET>
      </BODY>
      </HTML>
      --------------------------------------------------

      -- dims

      ###@###.###
      (Review ID: 42061)
      ======================================================================

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                psoper Pete Soper (Inactive)
                Reporter:
                dblairsunw Dave Blair (Inactive)
              • Votes:
                0 Vote for this issue
                Watchers:
                0 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:
                  Imported:
                  Indexed: