All Packages Class Hierarchy This Package Previous Next Index
java.lang.Object | +----java.lang.Thread
Every thread has a priority. Threads with higher priority are
executed in preference to threads with lower priority. Each thread
may or may not also be marked as a daemon. When code running in
some thread creates a new Thread
object, the new
thread has its priority initially set equal to the priority of the
creating thread, and is a daemon thread if and only if the
creating thread is a daemon.
When a Java Virtual Machine starts up, there is usually a single
non-daemon thread (which typically calls the method named
main
of some designated class). The Java Virtual
Machine continues to execute threads until either of the following
occurs:
exit
method of class Runtime
has been
called and the security manager has permitted the exit operation
to take place.
run
method or by
performing the stop
method.
There are two ways to create a new thread of execution. One is to
declare a class to be a subclass of Thread
. This
subclass should override the run
method of class
Thread
. An instance of the subclass can then be
allocated and started. For example, a thread that computes primes
larger than a stated value could be written as follows:
class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }
The following code would then create a thread and start it running:
PrimeThread p = new PrimeThread(143); p.start();
The other way to create a thread is to declare a class that
implements the Runnable
interface. That class then
implements the run
method. An instance of the class can
then be allocated, passed as an argument when creating
Thread
, and started. The same example in this other
style looks like the following:
class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }
The following code would then create a thread and start it running:
PrimeRun p = new PrimeRun(143); new Thread(p).start();
Every thread has a name for identification purposes. More than one thread may have the same name. If a name is not specified when a thread is created, a new name is generated for it.
Thread
object.
Thread
object.
Thread
object.
Thread
object.
Thread
object.
Thread
object so that it has
target
as its run object, has the specified
name
as its name, and belongs to the thread group
referred to by group
.
Thread
object.
millis
milliseconds for this thread to
die.
millis
milliseconds plus
nanos
nanoseconds for this thread to die.
Runnable
run object, then that
Runnable
object's run
method is called;
otherwise, this method does nothing and returns.
name
.
run
method of this thread.
public static final int MIN_PRIORITY
public static final int NORM_PRIORITY
public static final int MAX_PRIORITY
public Thread()
Thread
object. This constructor has
the same effect as Thread(null, null,
gname)
, where gname is
a newly generated name. Automatically generated names are of the
form "Thread-"+
n, where n is an integer.
Threads created this way must have overridden their
run()
method to actually do anything. An example
illustrating this method being used follows:
import java.lang.*; class plain01 implements Runnable { String name; plain01() { name = null; } plain01(String s) { name = s; } public void run() { if (name == null) System.out.println("A new thread created"); else System.out.println("A new thread with name " + name + " created"); } } class threadtest01 { public static void main(String args[] ) { int failed = 0 ; Thread t1 = new Thread(); if (t1 != null) System.out.println("new Thread() succeed"); else { System.out.println("new Thread() failed"); failed++; } } }
public Thread(Runnable target)
Thread
object. This constructor has
the same effect as Thread(null, target,
gname)
, where gname is
a newly generated name. Automatically generated names are of the
form "Thread-"+
n, where n is an integer.
run
method is called.
public Thread(ThreadGroup group, Runnable target)
Thread
object. This constructor has
the same effect as Thread(group, target,
gname)
, where gname is
a newly generated name. Automatically generated names are of the
form "Thread-"+
n, where n is an integer.
run
method is called.
public Thread(String name)
Thread
object. This constructor has
the same effect as Thread(null, null, name)
.
public Thread(ThreadGroup group, String name)
Thread
object. This constructor has
the same effect as Thread(group, null, name)
public Thread(Runnable target, String name)
Thread
object. This constructor has
the same effect as Thread(null, target, name)
.
run
method is called.
public Thread(ThreadGroup group, Runnable target, String name)
Thread
object so that it has
target
as its run object, has the specified
name
as its name, and belongs to the thread group
referred to by group
.
If group
is not null
, the
checkAccess
method of that thread group is called with
no arguments; this may result in throwing a
SecurityException
; if group
is
null
, the new process belongs to the same group as
the thread that is creating the new thread.
If the target
argument is not null
, the
run
method of the target
is called when
this thread is started. If the target argument is
null
, this thread's run
method is called
when this thread is started.
The priority of the newly created thread is set equal to the
priority of the thread creating it, that is, the currently running
thread. The method setPriority
may be used to
change the priority to a new value.
The newly created thread is initially marked as being a daemon
thread if and only if the thread creating it is currently marked
as a daemon thread. The method setDaemon
may be used
to change whether or not a thread is a daemon.
run
method is called.
public static native Thread currentThread()
public static native void yield()
public static native void sleep(long millis) throws InterruptedException
public static void sleep(long millis, int nanos) throws InterruptedException
public native synchronized void start()
run
method of this thread.
The result is that two threads are running concurrently: the
current thread (which returns from the call to the
start
method) and the other thread (which executes its
run
method).
public void run()
Runnable
run object, then that
Runnable
object's run
method is called;
otherwise, this method does nothing and returns.
Subclasses of Thread
should override this method.
public final void stop()
First, the checkAccess
method of this thread is called
with no arguments. This may result in throwing a
SecurityException
(in the current thread).
The thread represented by this thread is forced to stop whatever
it is doing abnormally and to throw a newly created
ThreadDeath
object as an exception.
It is permitted to stop a thread that has not yet been started. If the thread is eventually started, it immediately terminates.
An application should not normally try to catch
ThreadDeath
unless it must do some extraordinary
cleanup operation (note that the throwing of
ThreadDeath
causes finally
clauses of
try
statements to be executed before the thread
officially dies). If a catch
clause catches a
ThreadDeath
object, it is important to rethrow the
object so that the thread actually dies.
The top-level error handler that reacts to otherwise uncaught
exceptions does not print out a message or otherwise notify the
application if the uncaught exception is an instance of
ThreadDeath
.
Note: the use of this method is unsafe as it can result in the
corruption of invariants. Stopping a thread with Thread.stop causes
it to unlock all of the monitors that it has locked (as a natural
consequence of the unchecked ThreadDeath
exception
propagating up the stack). If any of the objects previously protected
by these monitors were in an inconsistent state, the damaged objects
become visible to other threads potentially resulting in arbitrary
behaviour. Many uses of stop
should be replaced by code
that simply modifies some volatile variable to indicate that the target
thread should stop running. The target thread should check this
variable regularly, and return from its run method in an orderly
fashion if the variable indicates that it is to stop running. If the
target thread waits for long periods, the interrupt method should be
used to interrupt the wait.
public final synchronized void stop(Throwable o)
First, the checkAccess
method of this thread is called
with no arguments. This may result in throwing a
SecurityException
(in the current thread).
If the argument obj
is null, a
NullPointerException
is thrown (in the current thread).
The thread represented by this thread is forced to complete
whatever it is doing abnormally and to throw the
Throwable
object obj
as an exception. This
is an unusual action to take; normally, the stop
method
that takes no arguments should be used.
It is permitted to stop a thread that has not yet been started. If the thread is eventually started, it immediately terminates.
public void interrupt()
public static boolean interrupted()
interrupted
is a static method, while
isInterrupted
is called on the current
Thread
instance.
true
if the current thread has been interrupted;
false
otherwise.
public boolean isInterrupted()
isInterrupted
is called on the current Thread
instance; by
contrast, interrupted
is a static method.
true
if this thread has been interrupted;
false
otherwise.
public void destroy()
public final native boolean isAlive()
true
if this thread is alive;
false
otherwise.
public final void suspend()
First, the checkAccess
method of this thread is called
with no arguments. This may result in throwing a
SecurityException
(in the current thread).
If the thread is alive, it is suspended and makes no further progress unless and until it is resumed.
public final void resume()
First, the checkAccess
method of this thread is called
with no arguments. This may result in throwing a
SecurityException
(in the current thread).
If the thread is alive but suspended, it is resumed and is permitted to make progress in its execution.
public final void setPriority(int newPriority)
First the checkAccess
method of this thread is called
with no arguments. This may result in throwing a
SecurityException
.
Otherwise, the priority of this thread is set to the smaller of
the specified newPriority
and the maximum permitted
priority of the thread's thread group.
MIN_PRIORITY
to
MAX_PRIORITY
.
public final int getPriority()
public final void setName(String name)
name
.
First the checkAccess
method of this thread is called
with no arguments. This may result in throwing a
SecurityException
.
public final String getName()
public final ThreadGroup getThreadGroup()
public static int activeCount()
public static int enumerate(Thread tarray[])
enumerate
method of this thread's thread group with
the array argument.
public native int countStackFrames()
public final synchronized void join(long millis) throws InterruptedException
millis
milliseconds for this thread to
die. A timeout of 0
means to wait forever.
public final synchronized void join(long millis, int nanos) throws InterruptedException
millis
milliseconds plus
nanos
nanoseconds for this thread to die.
public final void join() throws InterruptedException
public static void dumpStack()
public final void setDaemon(boolean on)
This method must be called before the thread is started.
true
, marks this thread as a
daemon thread.
public final boolean isDaemon()
true
if this thread is a daemon thread;
false
otherwise.
public void checkAccess()
If there is a security manager, its checkAccess
method
is called with this thread as its argument. This may result in
throwing a SecurityException
.
public String toString()
All Packages Class Hierarchy This Package Previous Next Index