why does this program not end?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • andthen

    #1

    why does this program not end?

    I read the following in the Thread API:

    When a Java Virtual Machine starts up, there is usually a single non-daemon
    thread (which typically calls the method named main of some designated
    class). The Java Virtual Machine continues to execute threads until either
    of the following occurs:
    - The exit method of class Runtime has been called and the security manager
    has permitted the exit operation to take place.
    - All threads that are not daemon threads have died, either by returning
    from the call to the run method or by throwing an exception that propagates
    beyond the run method.

    In the program below I have two Threads, the first thread reaches the end of
    main() and the second thread reaches the end of run() because I see all of
    the print statements. But the program doesn't terminate (I have to kill it
    with Control + c) and I'm wondering why that is.

    public class Test {
    public static void main(String[] args) throws Exception {
    Test2 h = new Test2();
    System.out.prin tln("before start");
    h.start();
    System.out.prin tln("after start");
    }
    }


    public class Test2 extends Thread {
    public void run() {
    System.out.prin tln("starting run");
    System.out.prin tln("ending run");
    }
    }


  • Raymond DeCampo

    #2
    Re: why does this program not end?

    andthen wrote:[color=blue]
    > But the program doesn't terminate (I have to kill it
    > with Control + c) and I'm wondering why that is.
    >
    > public class Test {
    > public static void main(String[] args) throws Exception {
    > Test2 h = new Test2();
    > System.out.prin tln("before start");
    > h.start();
    > System.out.prin tln("after start");
    > }
    > }
    >
    >
    > public class Test2 extends Thread {
    > public void run() {
    > System.out.prin tln("starting run");
    > System.out.prin tln("ending run");
    > }
    > }
    >[/color]

    This program works as expected for me; it must be a bug in your JVM if
    it does not work properly. I'm on linux using:

    $ java -version
    java version "1.4.2_04"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
    Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)


    HTH,
    Ray

    --
    XML is the programmer's duct tape.

    Comment

    • IchBin

      #3
      Re: why does this program not end?

      andthen wrote:[color=blue]
      > I read the following in the Thread API:
      >
      > When a Java Virtual Machine starts up, there is usually a single non-daemon
      > thread (which typically calls the method named main of some designated
      > class). The Java Virtual Machine continues to execute threads until either
      > of the following occurs:
      > - The exit method of class Runtime has been called and the security manager
      > has permitted the exit operation to take place.
      > - All threads that are not daemon threads have died, either by returning
      > from the call to the run method or by throwing an exception that propagates
      > beyond the run method.
      >
      > In the program below I have two Threads, the first thread reaches the end of
      > main() and the second thread reaches the end of run() because I see all of
      > the print statements. But the program doesn't terminate (I have to kill it
      > with Control + c) and I'm wondering why that is.
      >
      > public class Test {
      > public static void main(String[] args) throws Exception {
      > Test2 h = new Test2();
      > System.out.prin tln("before start");
      > h.start();
      > System.out.prin tln("after start");
      > }
      > }
      >
      >
      > public class Test2 extends Thread {
      > public void run() {
      > System.out.prin tln("starting run");
      > System.out.prin tln("ending run");
      > }
      > }
      >
      >[/color]

      Also this program works as expected for me; I'm on Window XP SP 2 using:

      java -version
      java version "1.5.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
      Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)

      Thanks in Advance...
      IchBin
      _______________ _______________ _______________ _______________ ______________

      'The meeting of two personalities is like the contact of two chemical
      substances:
      if there is any reaction, both are transformed.'
      - Carl Gustav Jung, (1875-1961), psychiatrist and psychologist

      Comment

      Working...