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