J.E.D.I.
9.4.1  Extending the Thread Class
The next example is a user-defined Thread class that prints the name of a thread object for 100 times.
class PrintNameThread extends Thread { PrintNameThreadString name {
supername; start;
runs the thread once instantiated }
public void run { String name = getName;
for int i = 0; i  100; i++ { System.out.printname;
} }
}
class TestThread { public static void mainString args[] {
PrintNameThread pnt1 = new PrintNameThreadA; PrintNameThread pnt2 = new PrintNameThreadB;
PrintNameThread pnt3 = new PrintNameThreadC; PrintNameThread pnt4 = new PrintNameThreadD;
} }
Observe that the reference variables  pnt1,  pnt2,  pnt3, and  pnt4  are simply used once. For this application, there is really no need to use variables to refer to each thread. You
can replace the body of the main method with the following statements:
new PrintNameThreadA; new PrintNameThreadB;
new PrintNameThreadC; new PrintNameThreadD;
The program produces different outputs for each run. Here is a sample output. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCDABCDABCDABCDABCDABCDA
BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABC
DABCDABCDABCDABCDABCDABCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBC DBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBC
DBCDBCDBCDBCDBCDBCDBCDBCD
9.4.2  Implementing the Runnable Interface
Another way of creating  user-defined  threads is  to implement  the  Runnable  interface. The   only   method   that   the  Runnable  interface   requires   you   to   implement   is   the  run
method. Think of the run method as the main method of the threads you create.
The following example is similar to the last example you studies but uses the second way of creating threads instead.
class PrintNameThread implements Runnable { Thread thread;
PrintNameThreadString name { thread = new Threadthis, name;
thread.start;
Introduction to Programming II Page 124
J.E.D.I.
} public void run {
String name = thread.getName; for int i = 0; i  100; i++ {
System.out.printname; }
} }
class TestThread { public static void mainString args[] {
new PrintNameThreadA; new PrintNameThreadB;
new PrintNameThreadC; new PrintNameThreadD;
} }
9.4.3  Extending vs. Implementing