[JAVA API] java.lang.Thread :: 소림사의 홍반장!

[JAVA API] java.lang.Thread

2012. 9. 3. 14:35 - 삘쏘굿
java.lang

Class Thread

  • All Implemented Interfaces:
    Runnable
    Direct Known Subclasses:
    ForkJoinWorkerThread


    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 throwing an exception that propagates beyond the run 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.

    Unless otherwise noted, passing a null argument to a constructor or method in this class will cause a NullPointerException to be thrown.

    Since:
    JDK1.0
    See Also:
    Runnable, Runtime.exit(int), run(), stop()
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class and Description
      static class  Thread.State
      A thread state.
      static interface  Thread.UncaughtExceptionHandler
      Interface for handlers invoked when a Thread abruptly terminates due to an uncaught exception.
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      static int MAX_PRIORITY
      The maximum priority that a thread can have.
      static int MIN_PRIORITY
      The minimum priority that a thread can have.
      static int NORM_PRIORITY
      The default priority that is assigned to a thread.
    • Constructor Summary

      Constructors 
      Constructor and Description
      Thread()
      Allocates a new Thread object.
      Thread(Runnable target)
      Allocates a new Thread object.
      Thread(Runnable target, String name)
      Allocates a new Thread object.
      Thread(String name)
      Allocates a new Thread object.
      Thread(ThreadGroup group, Runnable target)
      Allocates a new Thread object.
      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.
      Thread(ThreadGroup group, Runnable target, String name, long stackSize)
      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, and has the specified stack size.
      Thread(ThreadGroup group, String name)
      Allocates a new Thread object.
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      static int activeCount()
      Returns an estimate of the number of active threads in the current thread's thread groupand its subgroups.
      void checkAccess()
      Determines if the currently running thread has permission to modify this thread.
      protected Object clone()
      Throws CloneNotSupportedException as a Thread can not be meaningfully cloned.
      int countStackFrames()
      Deprecated. 
      The definition of this call depends on suspend(), which is deprecated. Further, the results of this call were never well-defined.
      static Thread currentThread()
      Returns a reference to the currently executing thread object.
      void destroy()
      Deprecated. 
      This method was originally designed to destroy this thread without any cleanup. Any monitors it held would have remained locked. However, the method was never implemented. If if were to be implemented, it would be deadlock-prone in much the manner of suspend(). If the target thread held a lock protecting a critical system resource when it was destroyed, no thread could ever access this resource again. If another thread ever attempted to lock this resource, deadlock would result. Such deadlocks typically manifest themselves as "frozen" processes. For more information, see Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
      static void dumpStack()
      Prints a stack trace of the current thread to the standard error stream.
      static int enumerate(Thread[] tarray)
      Copies into the specified array every active thread in the current thread's thread group and its subgroups.
      static Map<Thread,StackTraceElement[]> getAllStackTraces()
      Returns a map of stack traces for all live threads.
      ClassLoader getContextClassLoader()
      Returns the context ClassLoader for this Thread.
      static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
      Returns the default handler invoked when a thread abruptly terminates due to an uncaught exception.
      long getId()
      Returns the identifier of this Thread.
      String getName()
      Returns this thread's name.
      int getPriority()
      Returns this thread's priority.
      StackTraceElement[] getStackTrace()
      Returns an array of stack trace elements representing the stack dump of this thread.
      Thread.State getState()
      Returns the state of this thread.
      ThreadGroup getThreadGroup()
      Returns the thread group to which this thread belongs.
      Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
      Returns the handler invoked when this thread abruptly terminates due to an uncaught exception.
      static boolean holdsLock(Object obj)
      Returns true if and only if the current thread holds the monitor lock on the specified object.
      void interrupt()
      Interrupts this thread.
      static boolean interrupted()
      Tests whether the current thread has been interrupted.
      boolean isAlive()
      Tests if this thread is alive.
      boolean isDaemon()
      Tests if this thread is a daemon thread.
      boolean isInterrupted()
      Tests whether this thread has been interrupted.
      void join()
      Waits for this thread to die.
      void join(long millis)
      Waits at most millis milliseconds for this thread to die.
      void join(long millis, int nanos)
      Waits at most millis milliseconds plus nanos nanoseconds for this thread to die.
      void resume()
      Deprecated. 
      This method exists solely for use with suspend(), which has been deprecated because it is deadlock-prone. For more information, see Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
      void run()
      If this thread was constructed using a separate Runnable run object, then that Runnableobject's run method is called; otherwise, this method does nothing and returns.
      void setContextClassLoader(ClassLoader cl)
      Sets the context ClassLoader for this Thread.
      void setDaemon(boolean on)
      Marks this thread as either a daemon thread or a user thread.
      static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
      Set the default handler invoked when a thread abruptly terminates due to an uncaught exception, and no other handler has been defined for that thread.
      void setName(String name)
      Changes the name of this thread to be equal to the argument name.
      void setPriority(int newPriority)
      Changes the priority of this thread.
      void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
      Set the handler invoked when this thread abruptly terminates due to an uncaught exception.
      static void sleep(long millis)
      Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.
      static void sleep(long millis, int nanos)
      Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds plus the specified number of nanoseconds, subject to the precision and accuracy of system timers and schedulers.
      void start()
      Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.
      void stop()
      Deprecated. 
      This method is inherently unsafe. Stopping a thread with Thread.stop causes it to unlock all of the monitors that it has locked (as a natural consequence of the uncheckedThreadDeath 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 behavior. Many uses of stopshould be replaced by code that simply modifies some 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 (on a condition variable, for example), the interrupt method should be used to interrupt the wait. For more information, seeWhy are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
      void stop(Throwable obj)
      Deprecated. 
      This method is inherently unsafe. See stop() for details. An additional danger of this method is that it may be used to generate exceptions that the target thread is unprepared to handle (including checked exceptions that the thread could not possibly throw, were it not for this method). For more information, see Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
      void suspend()
      Deprecated. 
      This method has been deprecated, as it is inherently deadlock-prone. If the target thread holds a lock on the monitor protecting a critical system resource when it is suspended, no thread can access this resource until the target thread is resumed. If the thread that would resume the target thread attempts to lock this monitor prior to calling resume, deadlock results. Such deadlocks typically manifest themselves as "frozen" processes. For more information, see Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
      String toString()
      Returns a string representation of this thread, including the thread's name, priority, and thread group.
      static void yield()
      A hint to the scheduler that the current thread is willing to yield its current use of a processor.

'Dev. 자바 > API 및 이론' 카테고리의 다른 글

[JAVA API] java.net.InetAddress  (0) 2012.09.06
[JAVA API] java.net.URL  (0) 2012.09.06
[JAVA API] java.util.HashSet<E>  (0) 2012.09.01
[JAVA API] java.io.FileWriter  (0) 2012.08.08
[JAVA API] java.io.FileReader  (0) 2012.08.08

다른 카테고리의 글 목록

Dev. 자바/API 및 이론 카테고리의 포스트를 톺아봅니다