Threads of Control |
The simple example shown in full on the first page of this lesson defines two classes:SimpleThread
andTwoThreadsTest
. Let's begin our exploration of the application with theSimpleThread
class--a subclass of theThread
class, which is provided by thejava.lang
package:The first method in theclass SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getName()); try { sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println("DONE! " + getName()); } }SimpleThread
class is a constructor that takes aString
as its only argument. This constructor is implemented by calling a superclass constructor and is interesting to us only because it sets theThread
's name, which is used later in the program.The next method in the
SimpleThread
class is therun
method. Therun
method is the heart of anyThread
and where the action of theThread
takes place. Therun
method of theSimpleThread
class contains afor
loop that iterates ten times. In each iteration the method displays the iteration number and the name of theThread
, then sleeps for a random interval of up to 1 second. After the loop has finished, therun
method printsDONE!
along with the name of the thread. That's it for theSimpleThread
class.The
TwoThreadsTest
class provides amain
method that creates twoSimpleThread
threads: one is named "Jamaica" and the other is named "Fiji". (If you can't decide on where to go for vacation you can use this program to help you decide--go to the island whose thread prints "DONE!" first.)Theclass TwoThreadsTest { public static void main (String[] args) { new SimpleThread("Jamaica").start(); new SimpleThread("Fiji").start(); } }main
method also starts each thread immediately following its construction by calling thestart
method. To save you from typing in this program, click here for the source code to theSimpleThread
class and here for the source code to theTwoThreadsTest
program. Compile and run the program and watch your vacation fate unfold. You should see output similar to the following:(Looks like I'm going to Fiji!!) Notice how the output from each thread is intermingled with the output from the other. This is because both0 Jamaica 0 Fiji 1 Fiji 1 Jamaica 2 Jamaica 2 Fiji 3 Fiji 3 Jamaica 4 Jamaica 4 Fiji 5 Jamaica 5 Fiji 6 Fiji 6 Jamaica 7 Jamaica 7 Fiji 8 Fiji 9 Fiji 8 Jamaica DONE! Fiji 9 Jamaica DONE! JamaicaSimpleThread
threads are running concurrently. Thus, bothrun
methods are running at the same time and each thread is displaying its output at the same time as the other.Try This: Change the main program so that it creates a third thread with the name "Bora Bora". Compile and run the program again. Does this change the island of choice for your vacation? Here's the code for the new main program, which is now named
ThreeThreadsTest
.Keep Going
This page glosses over many of the details of threads such as thestart
andsleep
methods. Don't worry, the next several pages of this lesson explain these concepts and others in detail. The important thing to understand from this page is that a Java program can have many threads, and that those threads can run concurrently.
Threads of Control |