    All Packages  Class Hierarchy  This Package  Previous  Next  Index

# Class java.lang.Thread

    java.lang.Object
       |
       +----java.lang.Thread

public class Thread
extends Object
implements Runnable

A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.

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:

- The `exit` method of class `Runtime` has been called and the security manager has permitted the exit operation to take place.
- All threads that are not daemon threads have died, either by returning from the call to the `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.

See Also:
  Runnable, exit, run, stop

##

MAX_PRIORITY
  The maximum priority that a thread can have.
MIN_PRIORITY
  The minimum priority that a thread can have.
NORM_PRIORITY
  The default priority that is assigned to a thread.

##

Thread()
  Allocates a new `Thread` object.
Thread(Runnable)
  Allocates a new `Thread` object.
Thread(Runnable, String)
  Allocates a new `Thread` object.
Thread(String)
  Allocates a new `Thread` object.
Thread(ThreadGroup, Runnable)
  Allocates a new `Thread` object.
Thread(ThreadGroup, Runnable, String)
  Allocates a new `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(ThreadGroup, String)
  Allocates a new `Thread` object.

##

activeCount()
  Returns the current number of active threads in this thread group.
checkAccess()
  Determines if the currently running thread has permission to modify this thread.
countStackFrames()
  Counts the number of stack frames in this thread.
currentThread()
  Returns a reference to the currently executing thread object.
destroy()
  Destroys this thread, without any cleanup.
dumpStack()
  Prints a stack trace of the current thread.
enumerate(Thread[])
  Copies into the specified array every active thread in this thread group and its subgroups.
getName()
  Returns this thread's name.
getPriority()
  Returns this thread's priority.
getThreadGroup()
  Returns this thread's thread group.
interrupt()
  Interrupts this thread.
interrupted()
  Tests if the current thread has been interrupted.
isAlive()
  Tests if this thread is alive.
isDaemon()
  Tests if this thread is a daemon thread.
isInterrupted()
  Tests if the current thread has been interrupted.
join()
  Waits for this thread to die.
join(long)
  Waits at most `millis` milliseconds for this thread to die.
join(long, int)
  Waits at most `millis` milliseconds plus `nanos` nanoseconds for this thread to die.
resume()
  Resumes a suspended thread.
run()
  If this thread was constructed using a separate `Runnable` run object, then that `Runnable` object's `run` method is called; otherwise, this method does nothing and returns.
setDaemon(boolean)
  Marks this thread as either a daemon thread or a user thread.
setName(String)
  Changes the name of this thread to be equal to the argument `name`.
setPriority(int)
  Changes the priority of this thread.
sleep(long)
  Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds.
sleep(long, int)
  Causes the currently executing thread to sleep (cease execution) for the specified number of milliseconds plus the specified number of nanoseconds.
start()
  Causes this thread to begin execution; the Java Virtual Machine calls the `run` method of this thread.
stop()
  Forces the thread to stop executing.
stop(Throwable)
  Forces the thread to stop executing.
suspend()
  Suspends this thread.
toString()
  Returns a string representation of this thread, including the thread's name, priority, and thread group.
yield()
  Causes the currently executing thread object to temporarily pause and allow other threads to execute.

##

MIN_PRIORITY

     public static final int MIN_PRIORITY

  The minimum priority that a thread can have.

NORM_PRIORITY

     public static final int NORM_PRIORITY

  The default priority that is assigned to a thread.

MAX_PRIORITY

     public static final int MAX_PRIORITY

  The maximum priority that a thread can have.

##

Thread

     public Thread()

  Allocates a new `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++;
  >                  }
  >              }
  >          }

  See Also:
    Thread

Thread

     public Thread(Runnable target)

  Allocates a new `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.

  Parameters:
    target - the object whose `run` method is called.
  See Also:
    Thread

Thread

     public Thread(ThreadGroup group,
                   Runnable target)

  Allocates a new `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.

  Parameters:
    group - the thread group.
    target - the object whose `run` method is called.
  Throws: SecurityException
    if the current thread cannot create a thread in the specified thread group.
  See Also:
    Thread

Thread

     public Thread(String name)

  Allocates a new `Thread` object. This constructor has the same effect as `Thread(null, null, name)`.

  Parameters:
    name - the name of the new thread.
  See Also:
    Thread

Thread

     public Thread(ThreadGroup group,
                   String name)

  Allocates a new `Thread` object. This constructor has the same effect as `Thread(group, null, name)`

  Parameters:
    group - the thread group.
    name - the name of the new thread.
  Throws: SecurityException
    if the current thread cannot create a thread in the specified thread group.
  See Also:
    Thread

Thread

     public Thread(Runnable target,
                   String name)

  Allocates a new `Thread` object. This constructor has the same effect as `Thread(null, target, name)`.

  Parameters:
    target - the object whose `run` method is called.
    name - the name of the new thread.
  See Also:
    Thread

Thread

     public Thread(ThreadGroup group,
                   Runnable target,
                   String name)

  Allocates a new `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.

  Parameters:
    group - the thread group.
    target - the object whose `run` method is called.
    name - the name of the new thread.
  Throws: SecurityException
    if the current thread cannot create a thread in the specified thread group.
  See Also:
    run, run, setDaemon, setPriority, checkAccess

##

currentThread

     public static native Thread currentThread()

  Returns a reference to the currently executing thread object.

  Returns:
    the currently executing thread.

yield

     public static native void yield()

  Causes the currently executing thread object to temporarily pause and allow other threads to execute.

sleep

     public static native void sleep(long millis) throws InterruptedException

  Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds. The thread does not lose ownership of any monitors.

  Parameters:
    millis - the length of time to sleep in milliseconds.
  Throws: InterruptedException
    if another thread has interrupted this thread.
  See Also:
    notify

sleep

     public static void sleep(long millis,
                              int nanos) throws InterruptedException

  Causes the currently executing thread to sleep (cease execution) for the specified number of milliseconds plus the specified number of nanoseconds. The thread does not lose ownership of any monitors.

  Parameters:
    millis - the length of time to sleep in milliseconds.
    nanos - 0-999999 additional nanoseconds to sleep.
  Throws: IllegalArgumentException
    if the value of millis is negative or the value of nanos is not in the range 0-999999.
  Throws: InterruptedException
    if another thread has interrupted this thread.
  See Also:
    notify

start

     public native synchronized void start()

  Causes this thread to begin execution; the Java Virtual Machine calls the `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).

  Throws: IllegalThreadStateException
    if the thread was already started.
  See Also:
    run, stop

run

     public void run()

  If this thread was constructed using a separate `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.

  See Also:
    start, stop, Thread, run

stop

     public final void stop()

  Forces the thread to stop executing.

  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.

  Throws: SecurityException
    if the current thread cannot modify this thread.
  See Also:
    checkAccess, run, start, ThreadDeath, uncaughtException

stop

     public final synchronized void stop(Throwable o)

  Forces the thread to stop executing.

  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.

  Parameters:
    obj - the Throwable object to be thrown.
  Throws: SecurityException
    if the current thread cannot modify this thread.
  See Also:
    checkAccess, run, start, stop

interrupt

     public void interrupt()

  Interrupts this thread.

interrupted

     public static boolean interrupted()

  Tests if the current thread has been interrupted. Note that `interrupted` is a static method, while `isInterrupted` is called on the current `Thread` instance.

  Returns:
    `true` if the current thread has been interrupted; `false` otherwise.
  See Also:
    isInterrupted

isInterrupted

     public boolean isInterrupted()

  Tests if the current thread has been interrupted. Note that `isInterrupted` is called on the current `Thread` instance; by contrast, `interrupted` is a static method.

  Returns:
    `true` if this thread has been interrupted; `false` otherwise.
  See Also:
    interrupted

destroy

     public void destroy()

  Destroys this thread, without any cleanup. Any monitors it has locked remain locked. (This method is not implemented in Java 1.0.2.)

isAlive

     public final native boolean isAlive()

  Tests if this thread is alive. A thread is alive if it has been started and has not yet died.

  Returns:
    `true` if this thread is alive; `false` otherwise.

suspend

     public final void suspend()

  Suspends this thread.

  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.

  Throws: SecurityException
    if the current thread cannot modify this thread.
  See Also:
    checkAccess, isAlive

resume

     public final void resume()

  Resumes a suspended thread.

  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.

  Throws: SecurityException
    if the current thread cannot modify this thread.
  See Also:
    checkAccess, isAlive

setPriority

     public final void setPriority(int newPriority)

  Changes the priority of this thread.

  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.

  Throws: IllegalArgumentException
    If the priority is not in the range `MIN_PRIORITY` to `MAX_PRIORITY`.
  Throws: SecurityException
    if the current thread cannot modify this thread.
  See Also:
    checkAccess, getPriority, getThreadGroup, MAX_PRIORITY, MIN_PRIORITY, getMaxPriority

getPriority

     public final int getPriority()

  Returns this thread's priority.

  Returns:
    this thread's name.
  See Also:
    setPriority

setName

     public final void setName(String name)

  Changes the name of this thread to be equal to the argument `name`.

  First the `checkAccess` method of this thread is called with no arguments. This may result in throwing a `SecurityException`.

  Parameters:
    name - the new name for this thread.
  Throws: SecurityException
    if the current thread cannot modify this thread.
  See Also:
    checkAccess, getName

getName

     public final String getName()

  Returns this thread's name.

  Returns:
    this thread's name.
  See Also:
    setName

getThreadGroup

     public final ThreadGroup getThreadGroup()

  Returns this thread's thread group.

  Returns:
    this thread's thread group.

activeCount

     public static int activeCount()

  Returns the current number of active threads in this thread group.

  Returns:
    the current number of threads in this thread's thread group.

enumerate

     public static int enumerate(Thread tarray[])

  Copies into the specified array every active thread in this thread group and its subgroups. This method simply calls the `enumerate` method of this thread's thread group with the array argument.

  Returns:
    the number of threads put into the array.
  See Also:
    enumerate

countStackFrames

     public native int countStackFrames()

  Counts the number of stack frames in this thread. The thread must be suspended.

  Returns:
    the number of stack frames in this thread.
  Throws: IllegalThreadStateException
    if this thread is not suspended.

join

     public final synchronized void join(long millis) throws InterruptedException

  Waits at most `millis` milliseconds for this thread to die. A timeout of `0` means to wait forever.

  Parameters:
    millis - the time to wait in milliseconds.
  Throws: InterruptedException
    if another thread has interrupted the current thread.

join

     public final synchronized void join(long millis,
                                         int nanos) throws InterruptedException

  Waits at most `millis` milliseconds plus `nanos` nanoseconds for this thread to die.

  Parameters:
    millis - the time to wait in milliseconds.
    nanos - 0-999999 additional nanoseconds to wait.
  Throws: IllegalArgumentException
    if the value of millis is negative the value of nanos is not in the range 0-999999.
  Throws: InterruptedException
    if another thread has interrupted the current thread.

join

     public final void join() throws InterruptedException

  Waits for this thread to die.

  Throws: InterruptedException
    if another thread has interrupted the current thread.

dumpStack

     public static void dumpStack()

  Prints a stack trace of the current thread. This method is used only for debugging.

  See Also:
    printStackTrace

setDaemon

     public final void setDaemon(boolean on)

  Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads.

  This method must be called before the thread is started.

  Parameters:
    on - if `true`, marks this thread as a daemon thread.
  Throws: IllegalThreadStateException
    if this thread is active.
  See Also:
    isDaemon

isDaemon

     public final boolean isDaemon()

  Tests if this thread is a daemon thread.

  Returns:
    `true` if this thread is a daemon thread; `false` otherwise.
  See Also:
    setDaemon

checkAccess

     public void checkAccess()

  Determines if the currently running thread has permission to modify this thread.

  If there is a security manager, its `checkAccess` method is called with this thread as its argument. This may result in throwing a `SecurityException`.

  Throws: SecurityException
    if the current thread is not allowed to access this thread.
  See Also:
    checkAccess

toString

     public String toString()

  Returns a string representation of this thread, including the thread's name, priority, and thread group.

  Returns:
    a string representation of this thread.
  Overrides:
    toString in class Object

    All Packages  Class Hierarchy  This Package  Previous  Next  Index

Submit a bug or feature - Version 1.1.8 of Java Platform API Specification
Java is a trademark or registered trademark of Sun Microsystems, Inc. in the US and other countries.
Copyright 1995-1999 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.