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 final static int MIN_PRIORITY
public final static int NORM_PRIORITY
public final static 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 Thread currentThread()
public static void yield()
public static void sleep(long millis) throws InterruptedException
public static void sleep(long millis,
int nanos) throws InterruptedException
public 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.
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 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 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