Java Reference
In-Depth Information
Display 19.2 Threaded Version of FillDemo (part 3 of 3)
55 public void doNothing( int milliseconds)
56 {
57 try
58 {
59 Thread.sleep(milliseconds);
60 }
61 catch (InterruptedException e)
62 {
63 System.out.println("Unexpected interrupt");
64 System.exit(0);
65 }
66 }
67 } //End Packer inner class
68 }
We need only to discuss the method start and we will be through with our
explanation. The method start initiates the computation (process) of the calling
thread. It performs some overhead associated with starting a thread and then it invokes
the run method for the thread. As we have already seen, the run method of the class
Packer in Display 19.2 draws the circles we want, so the invocation
run()
packerThread.start( );
does this as well, because it calls run . Note that you do not invoke run directly. Instead,
you invoke start , which does some other needed things and then invokes run .
This ends our explanation of the multithreaded program in Display 19.2, but
there is still one, perhaps puzzling, thing about the class Packer that we should
explain. The definition of the class Packer includes no instance variables. So, why
do we need to bother with an object of the class Packer ? Why not simply make all
the methods static and call them with the class name Packer ? The answer is that the
only way to get a new thread is to create a new Thread object. The things inherited
from the class Thread are what the object needs to be a thread. Static methods do not
a thread make. In fact, not only will static methods not work, the compiler will not
even allow you to define run to be static. This is because run is inherited from Thread
as a nonstatic method; this cannot be changed to static when overriding a method
definition. The compiler will not let you even try to do this without creating an object
of the class Packer .
 
Search WWH ::




Custom Search