Thread
(itself a Runnable
object) and override its empty run
method so that it does something. Let's look at the SimpleThread
class, the first of two classes in this example, which does just that: SimpleThread.java
public class 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) {
//don't swallow
}
}
System.out.println("DONE! " + getName());
}
}
SimpleThread
class is a constructor that takes a String
as its only argument. This constructor is implemented by calling a superclass constructor and is interesting to us only because it sets the Thread
's name, which is used later in the program. The next method in the SimpleThread
class is the run
method. The run
method is the heart of any Thread
and where the action of the Thread
takes place. The run
method of the SimpleThread
class contains a for
loop that iterates ten times. In each iteration the method displays the iteration number and the name of the Thread
, then sleeps for a random interval of up to 1 second. After the loop has finished, the run
method prints DONE!
along with the name of the thread. That's it for the SimpleThread
class. The
TwoThreadsTest
class provides a main
method that creates two SimpleThread
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.) TwoThreads.java
public class 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 the start
method. To save you from typing in this program, click here for the source code to the SimpleThread
class and here for the source code to the TwoThreadsTest
program. Compile and run the program and watch your vacation fate unfold. You should see output similar to the following: 0 Jamaica(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 both
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! Jamaica
SimpleThread
threads are running concurrently. Thus, both run
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
. public class ThreeThreadsTest {
public static void main (String[] args) {
new SimpleThread("Jamaica").start();
new SimpleThread("Fiji").start();
new SimpleThread("Bora Bora").start();
}
}
Output:
0 Jamaica
0 Fiji
1 Jamaica
1 Fiji
2 Jamaica
2 Fiji
3 Fiji
3 Jamaica
4 Fiji
4 Jamaica
5 Jamaica
6 Jamaica
5 Fiji
7 Jamaica
6 Fiji
8 Jamaica
9 Jamaica
7 Fiji
8 Fiji
9 Fiji
DONE! Fiji
DONE! Jamaica
Now, let's look at another example, the
Clock
applet, that uses the other technique for providing a run
method to a Thread
. See – Implementing the runnable interface.Download the source code
You can download the source code from here.
No comments:
Post a Comment