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