Home Page
>
Deployment
>
Applets
Threads in Applets
Note:
This page assumes that you know what a thread is.
If you don't, please read
Processes and Threads
before reading this page.
Every applet can run in multiple threads.
The applet's GUI is created on the event-dispatching thread.
The threads that the major milestone methods
init,
start,
stop, and
destroy
are called from depends on the application that's running the applet.
But no application ever calls them
from the event handling thread.
Many browsers
allocate a thread for each applet on a page,
using that thread for all calls to the applet's major milestone methods.
Some browsers allocate a thread group for each applet,
so that it's easy to kill all the threads
that belong to a particular applet.
In any case,
you're guaranteed that every thread
that any of an applet's major milestone methods creates
belongs to the same thread group.
Below is a PrintThread applet.
PrintThread is a modified version of SimpleApplet
that prints the thread and thread group
that its init,
start,
stop,
destroy, and
update
methods are called from.
Here's the code for the
PrintThread example.
As usual, to see the output for the methods
such as destroy
that are called during unloading,
you need to look at the standard output. For standard output for an
applet run in a browser, open the Java Console from the browser's Tools menu.
See
Displaying Diagnostics to the Standard Output and Error Streams for information about the standard output stream.
Note: If you don't see the applet running above, you need to install Java Plug-in, which happens automatically when you install the Java(TM) SE JRE or JDK. This applet requires JDK 1.4 or later. You can find more information on the Java Plug-in home page.
So why would an applet need to create and use its own threads?
Imagine an applet that performs some time-consuming initialization
loading images, for example in its init method.
The thread that invokes init
can not do anything else until init returns.
In some browsers,
this might mean that the browser can't display the applet
or anything after it
until the applet has finished initializing itself.
So if the applet is at the top of the page, for example,
then nothing would appear on the page
until the applet has finished initializing itself.
Even in browsers that create a separate thread for each applet,
it makes sense to put any time-consuming tasks
into an applet-created thread,
so that the applet can perform other tasks
while it waits for the time-consuming ones to be completed.
Rule of Thumb:
If an applet performs a time-consuming task,
it should create and use its own thread to perform that task.
Applets typically perform two kinds of time-consuming tasks:
tasks that they perform once,
and tasks that they perform repeatedly.
The next page
gives an example of both.