Most visited

Recently visited

Added in API level 1

Thread

public class Thread
extends Object implements Runnable

java.lang.Object
   ↳ java.lang.Thread
Known Direct Subclasses


线程是程序中执行的线程。 Java虚拟机允许应用程序同时运行多个执行线程。

每个线程都有优先权。 执行优先级较高的线程优先于较低优先级的线程。 每个线程可能也可能不会被标记为守护进程。 当某个线程中运行的代码创建一个新的Thread对象时,新线程的优先级初始设置等于创建线程的优先级,并且当且仅当创建线程是守护进程时才是守护线程。

当Java虚拟机启动时,通常会有一个非守护进程线程(通常会调用某个指定类的名为main的方法)。 Java虚拟机将继续执行线程,直到出现以下任一情况:

有两种方法可以创建一个新的执行线程。 一个是声明一个类是Thread的子类。 这个子类应该重写run类的方法Thread 然后可以分配和启动子类的一个实例。 例如,计算大于所述值的素数的线程可以写成如下:


     class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }
 

下面的代码会创建一个线程并开始运行:

     PrimeThread p = new PrimeThread(143);
     p.start();
 

另一种创建线程的方式是声明一个实现了Runnable接口的类。 然后该类实现了run方法。 然后可以分配类的实例,并在创建Thread时作为参数进行Thread ,然后启动。 这种其他风格中的相同示例如下所示:


     class PrimeRun implements Runnable {
         long minPrime;
         PrimeRun(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }
 

下面的代码会创建一个线程并开始运行:

     PrimeRun p = new PrimeRun(143);
     new Thread(p).start();
 

每个线程都有一个用于标识的名称。 多个线程可能具有相同的名称。 如果在创建线程时未指定名称,则会为其生成新名称。

除非另有说明,否则将 null参数传递给 null中的构造函数或方法将导致引发 NullPointerException

也可以看看:

Summary

Nested classes

枚举 Thread.State

线程状态。

interface Thread.UncaughtExceptionHandler

Thread由于未捕获的异常而突然终止时调用的处理程序接口。

Constants

int MAX_PRIORITY

线程可以拥有的最大优先级。

int MIN_PRIORITY

线程可以拥有的最低优先级。

int NORM_PRIORITY

分配给线程的默认优先级。

Public constructors

Thread()

分配一个新的 Thread对象。

Thread(Runnable target)

分配一个新的 Thread对象。

Thread(ThreadGroup group, Runnable target)

分配一个新的 Thread对象。

Thread(String name)

分配一个新的 Thread对象。

Thread(ThreadGroup group, String name)

分配一个新的 Thread对象。

Thread(Runnable target, String name)

分配一个新的 Thread对象。

Thread(ThreadGroup group, Runnable target, String name)

分配一个新的 Thread对象,以便它具有 target作为其运行对象,具有指定的 name作为其名称,并且属于由 group引用的线程组。

Thread(ThreadGroup group, Runnable target, String name, long stackSize)

分配一个新的 Thread对象,使其具有 target作为其运行对象,具有指定的 name作为其名称,并且属于由 group引用的线程组,并且具有指定的 堆栈大小

Public methods

static int activeCount()

返回当前线程 thread group及其子组中活动线程数的估计值。

final void checkAccess()

确定当前正在运行的线程是否有权修改此线程。

int countStackFrames()

此方法在API级别1中已被弃用。此调用的定义取决于suspend() ,这已弃用。 此外,这次电话会议的结果从未明确定义。

static Thread currentThread()

返回对当前正在执行的线程对象的引用。

void destroy()

此方法在API级别1中已弃用。此方法最初设计用于在不进行任何清理的情况下销毁此线程。 它保存的任何监视器都将保持锁定状态。 但是,该方法从未实现过。 如果如果要实施的话,那么将会以suspend()的方式出现suspend() 如果目标线程在销毁时保留了关键系统资源的锁,则线程无法再次访问此资源。 如果另一个线程试图锁定这个资源,会导致死锁。 这种僵局通常表现为“冻结”的过程。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

static void dumpStack()

将当前线程的堆栈跟踪打印到标准错误流。

static int enumerate(Thread[] tarray)

将当前线程的线程组及其子线程组中的每个活动线程复制到指定的数组中。

static Map<ThreadStackTraceElement[]> getAllStackTraces()

返回所有活动线程的堆栈跟踪图。

ClassLoader getContextClassLoader()

返回此线程的上下文ClassLoader。

static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()

返回由于未捕获的异常而导致线程突然终止时调用的默认处理程序。

long getId()

返回此线程的标识符。

final String getName()

返回此线程的名称。

final int getPriority()

返回此线程的优先级。

StackTraceElement[] getStackTrace()

返回表示此线程的堆栈转储的堆栈跟踪元素的数组。

Thread.State getState()

返回此线程的状态。

final ThreadGroup getThreadGroup()

返回此线程所属的线程组。

Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()

返回由于未捕获的异常而导致此线程突然终止时调用的处理函数。

static boolean holdsLock(Object obj)

当且仅当当前线程持有指定对象上的监视器锁定时返回 true

void interrupt()

中断此线程。

static boolean interrupted()

测试当前线程是否被中断。

final boolean isAlive()

测试此线程是否存在。

final boolean isDaemon()

测试此线程是否为守护程序线程。

boolean isInterrupted()

测试该线程是否被中断。

final void join()

等待这个线程死亡。

final void join(long millis)

此线程死亡最多等待 millis毫秒。

final void join(long millis, int nanos)

最多等待 millis毫秒加上 nanos纳秒,以便此线程死亡。

final void resume()

此方法在API级别1中已被弃用。此方法仅供与suspend()一起使用,该方法由于容易出现死锁suspend()推荐使用。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

void run()

如果此线程是使用单独的Runnable运行对象构建的,则Runnable对象的run方法; 否则,此方法不做任何事情并返回。

void setContextClassLoader(ClassLoader cl)

为此线程设置上下文ClassLoader。

final void setDaemon(boolean on)

将此线程标记为 daemon线程或用户线程。

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

设置当线程由于未捕获的异常而突然终止时调用的缺省处理程序,并且没有为该线程定义其他处理程序。

final void setName(String name)

将此线程的名称更改为等于参数 name

final void setPriority(int newPriority)

改变这个线程的优先级。

void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

设置由于未捕获的异常而导致此线程突然终止时调用的处理函数。

static void sleep(long millis, int nanos)

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数加上指定的纳秒数,这取决于系统定时器和调度程序的精度和准确性。

static void sleep(long millis)

使系统定时器和调度程序的精确性和准确性,使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数。

void start()

导致此线程开始执行; Java虚拟机调用此线程的run方法。

final void stop()

此方法在API级别1中已弃用。此方法本质上不安全。 使用Thread.stop停止线程会导致它解锁所有已锁定的监视器(作为未检查的ThreadDeath异常传播堆栈的自然结果)。 如果之前由这些监视器保护的任何对象处于不一致状态,则损坏的对象对其他线程可见,可能导致任意行为。 stop许多用法应该由代码替换,该代码只是修改某些变量以指示目标线程应该停止运行。 目标线程应该定期检查这个变量,并且如果变量指示它将停止运行,则从其run方法有序地返回。 如果目标线程等待很长时间(例如,在条件变量上),则应该使用interrupt方法来中断等待。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

final void stop(Throwable obj)

此方法在API级别1中已弃用。此方法本质上不安全。 详情请参阅stop() 这种方法的另一个危险是它可能被用来生成目标线程没有准备处理的异常(包括线程不可能抛出的检查异常,如果不是这种方法)。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

final void suspend()

此方法在API级别1中已被弃用。此方法已被弃用,因为它本质上容易出现死锁。 如果目标线程在监视器上保留一个锁定,以便在暂停时保护关键系统资源,则在目标线程恢复之前,线程无法访问此资源。 如果在调用resume之前,将恢复目标线程的线程尝试锁定此监视器, resume导致死锁。 这种僵局通常表现为“冻结”的过程。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

String toString()

返回此线程的字符串表示形式,包括线程的名称,优先级和线程组。

static void yield()

向调度程序提示当前线程愿意产生当前使用的处理器。

Protected methods

Object clone()

作为线程引发CloneNotSupportedException不能被有意克隆。

Inherited methods

From class java.lang.Object
From interface java.lang.Runnable

Constants

MAX_PRIORITY

Added in API level 1
int MAX_PRIORITY

线程可以拥有的最大优先级。

常量值:10(0x0000000a)

MIN_PRIORITY

Added in API level 1
int MIN_PRIORITY

线程可以拥有的最低优先级。

常数值:1(0x00000001)

NORM_PRIORITY

Added in API level 1
int NORM_PRIORITY

分配给线程的默认优先级。

常量值:5(0x00000005)

Public constructors

Thread

Added in API level 1
Thread ()

分配新的Thread对象。 此构造函数与Thread (null, null, gname)具有相同的效果,其中gname是新生成的名称。 自动生成的名称格式为"Thread-"+ n ,其中n是一个整数。

Thread

Added in API level 1
Thread (Runnable target)

分配一个新的Thread对象。 此构造函数与Thread (null, target, gname)具有相同的效果,其中gname是新生成的名称。 自动生成的名称格式为"Thread-"+ n ,其中n是一个整数。

Parameters
target Runnable: the object whose run method is invoked when this thread is started. If null, this classes run method does nothing.

Thread

Added in API level 1
Thread (ThreadGroup group, 
                Runnable target)

分配新的Thread对象。 此构造函数与Thread (group, target, gname)具有相同的效果,其中gname是新生成的名称。 自动生成的名称格式为"Thread-"+ n ,其中n是一个整数。

Parameters
group ThreadGroup: the thread group. If null and there is a security manager, the group is determined by SecurityManager.getThreadGroup(). If there is not a security manager or SecurityManager.getThreadGroup() returns null, the group is set to the current thread's thread group.
target Runnable: the object whose run method is invoked when this thread is started. If null, this thread's run method is invoked.
Throws
SecurityException if the current thread cannot create a thread in the specified thread group

Thread

Added in API level 1
Thread (String name)

分配一个新的Thread对象。 此构造函数与Thread (null, null, name)具有相同的效果。

Parameters
name String: the name of the new thread

Thread

Added in API level 1
Thread (ThreadGroup group, 
                String name)

分配一个新的Thread对象。 该构造函数与Thread (group, null, name)具有相同的效果。

Parameters
group ThreadGroup: the thread group. If null and there is a security manager, the group is determined by SecurityManager.getThreadGroup(). If there is not a security manager or SecurityManager.getThreadGroup() returns null, the group is set to the current thread's thread group.
name String: the name of the new thread
Throws
SecurityException if the current thread cannot create a thread in the specified thread group

Thread

Added in API level 1
Thread (Runnable target, 
                String name)

分配一个新的Thread对象。 这个构造函数与Thread (null, target, name)具有相同的效果。

Parameters
target Runnable: the object whose run method is invoked when this thread is started. If null, this thread's run method is invoked.
name String: the name of the new thread

Thread

Added in API level 1
Thread (ThreadGroup group, 
                Runnable target, 
                String name)

分配新的 Thread对象,以便它具有 target作为其运行对象,具有指定的 name作为其名称,并且属于由 group引用的线程组。

如果有安全管理器, checkAccess ThreadGroup作为参数调用其 checkAccess方法。

另外, checkPermission方法在被直接或间接由覆盖 getContextClassLoadersetContextClassLoader方法的子类的构造函数调用时调用 RuntimePermission("enableContextClassLoaderOverride")权限。

新创建的线程的优先级设置等于创建它的线程的优先级,即当前正在运行的线程。 方法setPriority可用于将优先级改变为新值。

新创建的线程最初被标记为守护线程,当且仅当创建它的线程当前标记为守护线程。 方法setDaemon可用于更改线程是否为守护进程。

Parameters
group ThreadGroup: the thread group. If null and there is a security manager, the group is determined by SecurityManager.getThreadGroup(). If there is not a security manager or SecurityManager.getThreadGroup() returns null, the group is set to the current thread's thread group.
target Runnable: the object whose run method is invoked when this thread is started. If null, this thread's run method is invoked.
name String: the name of the new thread
Throws
SecurityException if the current thread cannot create a thread in the specified thread group or cannot override the context class loader methods.

Thread

Added in API level 1
Thread (ThreadGroup group, 
                Runnable target, 
                String name, 
                long stackSize)

分配一个新的 Thread对象,使其具有 target作为其运行对象,具有指定的 name作为其名称,并且属于由 group引用的线程组,并具有指定的 堆栈大小

这个构造函数与Thread(ThreadGroup, Runnable, String)完全相同,但它允许指定线程堆栈大小。 堆栈大小是虚拟机为此线程的堆栈分配的地址空间的近似字节数。 stackSize参数的影响(如果有)与平台高度相关。

在某些平台上,为stackSize参数指定较高的值可能会允许线程在抛出StackOverflowError之前获得更大的递归深度。 同样,指定一个较低的值可能会允许更多数量的线程同时存在,而不会抛出OutOfMemoryError (或其他内部错误)。 参数stackSize的值与最大递归深度和并发级别之间的关系的详细信息是平台相关的。 在某些平台上,参数stackSize的值可能没有任何影响。

虚拟机可自由处理stackSize参数作为建议。 如果平台的指定值过低,则虚拟机可能会使用某个平台特定的最小值; 如果指定的值不合理地高,那么虚拟机可能会使用某些平台特定的最大值。 同样,虚拟机可以自由地将指定值向上或向下四舍五入以适应(或完全忽略它)。

stackSize参数指定零值将导致此构造函数的行为与 Thread(ThreadGroup, Runnable, String)构造函数完全相同。

由于这个构造函数的行为依赖于平台的性质,所以应该对它的使用进行极其小心的处理。 执行给定计算所需的线程堆栈大小可能会因JRE实现而异。 鉴于这种变化,可能需要仔细调整堆栈大小参数,并且可能需要对运行应用程序的每个JRE实现重复进行调整。

实现注意事项:鼓励Java平台实现者记录他们的实现相对于 stackSize参数的行为。

Parameters
group ThreadGroup: the thread group. If null and there is a security manager, the group is determined by SecurityManager.getThreadGroup(). If there is not a security manager or SecurityManager.getThreadGroup() returns null, the group is set to the current thread's thread group.
target Runnable: the object whose run method is invoked when this thread is started. If null, this thread's run method is invoked.
name String: the name of the new thread
stackSize long: the desired stack size for the new thread, or zero to indicate that this parameter is to be ignored.
Throws
SecurityException if the current thread cannot create a thread in the specified thread group

Public methods

activeCount

Added in API level 1
int activeCount ()

返回当前线程thread group及其子组中活动线程数的估计值。 递归地遍历当前线程的线程组中的所有子组。

返回的值仅为估计值,因为线程数可能会动态变化,而此方法会遍历内部数据结构,并可能受某些系统线程的影响。 此方法主要用于调试和监控目的。

Returns
int an estimate of the number of active threads in the current thread's thread group and in any other thread group that has the current thread's thread group as an ancestor

checkAccess

Added in API level 1
void checkAccess ()

确定当前正在运行的线程是否有权修改此线程。

如果有安全管理器,则使用此线程作为其参数调用其checkAccess方法。 这可能会导致投掷SecurityException

Throws
SecurityException if the current thread is not allowed to access this thread.

也可以看看:

countStackFrames

Added in API level 1
int countStackFrames ()

此方法在API级别1中已弃用。
此调用的定义取决于suspend() ,已弃用。 此外,这次电话会议的结果从未明确定义。

计算此线程中堆栈帧的数量。 该线程必须暂停。

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

currentThread

Added in API level 1
Thread currentThread ()

返回对当前正在执行的线程对象的引用。

Returns
Thread the currently executing thread.

destroy

Added in API level 1
void destroy ()

此方法在API级别1中已弃用。
此方法最初设计用于销毁此线程而不进行任何清理。 它保存的任何监视器都将保持锁定状态。 但是,该方法从未实现过。 如果如果要实施的话,那么它就会像suspend()容易出现死锁。 如果目标线程在销毁时保留了关键系统资源的锁,则线程无法再次访问此资源。 如果另一个线程试图锁定这个资源,会导致死锁。 这种僵局通常表现为“冻结”的过程。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

抛出 UnsupportedOperationException

Throws
UnsupportedOperationException always

dumpStack

Added in API level 1
void dumpStack ()

将当前线程的堆栈跟踪打印到标准错误流。 此方法仅用于调试。

也可以看看:

enumerate

Added in API level 1
int enumerate (Thread[] tarray)

将当前线程的线程组及其子线程组中的每个活动线程复制到指定的数组中。 此方法只是调用当前线程的线程组的enumerate(Thread[])方法。

应用程序可能会使用activeCount方法来估计数组的大小,但如果数组太短而无法保存所有线程,则额外的线程会被忽略。 如果获取当前线程的线程组及其子线程组中的每个活动线程非常重要,那么调用者应该验证返回的int值是否严格小于tarray的长度。

由于这种方法固有的竞争条件,建议该方法仅用于调试和监控目的。

Parameters
tarray Thread: an array into which to put the list of threads
Returns
int the number of threads put into the array
Throws
SecurityException if checkAccess() determines that the current thread cannot access its thread group

getAllStackTraces

Added in API level 1
Map<ThreadStackTraceElement[]> getAllStackTraces ()

返回所有活动线程的堆栈跟踪图。 映射键是线程,每个映射值都是StackTraceElement的数组,表示对应的Thread的堆栈转储。 返回的堆栈跟踪采用为getStackTrace方法指定的格式。

这个方法被调用时线程可能正在执行。 每个线程的堆栈跟踪仅表示一个快照,并且可以在不同的时间获得每个堆栈跟踪。 如果虚拟机没有关于线程的堆栈跟踪信息,则将在映射值中返回一个零长度的数组。

如果有安全管理器,则安全管理器的 checkPermission方法被调用,并具有 RuntimePermission("getStackTrace")权限以及 RuntimePermission("modifyThreadGroup")权限,以查看是否可以获取所有线程的堆栈跟踪。

Returns
Map<ThreadStackTraceElement[]> a Map from Thread to an array of StackTraceElement that represents the stack trace of the corresponding thread.
Throws
SecurityException if a security manager exists and its checkPermission method doesn't allow getting the stack trace of thread.

也可以看看:

getContextClassLoader

Added in API level 1
ClassLoader getContextClassLoader ()

返回此线程的上下文ClassLoader。 上下文ClassLoader由线程的创建者提供,供加载类和资源时在此线程中运行的代码使用。 如果不是set ,则默认为父线程的ClassLoader上下文。 原始线程的上下文ClassLoader通常设置为用于加载应用程序的类加载器。

如果安全管理器存在,并且调用者的类加载器是不是 null ,是不一样或上下文类加载器的祖先,则此方法调用安全管理器的 checkPermission方法与 RuntimePermission ("getClassLoader")权限验证的是检索上下文类加载器是允许的。

Returns
ClassLoader the context ClassLoader for this Thread, or null indicating the system class loader (or, failing that, the bootstrap class loader)
Throws
SecurityException if the current thread cannot get the context ClassLoader

getDefaultUncaughtExceptionHandler

Added in API level 1
Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler ()

返回由于未捕获的异常而导致线程突然终止时调用的默认处理程序。 如果返回的值是null ,则没有默认值。

Returns
Thread.UncaughtExceptionHandler

也可以看看:

getId

Added in API level 1
long getId ()

返回此线程的标识符。 线程ID是在创建此线程时生成的正数long数字。 线程ID是唯一的,并且在其生命周期中保持不变。 当一个线程终止时,这个线程ID可能会被重用。

Returns
long this thread's ID.

getName

Added in API level 1
String getName ()

返回此线程的名称。

Returns
String this thread's name.

也可以看看:

getPriority

Added in API level 1
int getPriority ()

返回此线程的优先级。

Returns
int this thread's priority.

也可以看看:

getStackTrace

Added in API level 1
StackTraceElement[] getStackTrace ()

返回表示此线程的堆栈转储的堆栈跟踪元素的数组。 如果此线程尚未启动,已启动但尚未安排由系统运行或终止,此方法将返回一个零长度的数组。 如果返回的数组的长度非零,那么数组的第一个元素表示堆栈的顶部,这是序列中最近的方法调用。 数组的最后一个元素表示堆栈的底部,这是序列中最近的方法调用。

如果有一个安全管理器,并且此线程不是当前线程,则使用 RuntimePermission("getStackTrace")权限调用安全管理器的 checkPermission方法,以查看是否可以获取堆栈跟踪。

某些虚拟机在某些情况下可能会忽略堆栈跟踪中的一个或多个堆栈帧。 在极端情况下,不允许有关该线程的堆栈跟踪信息的虚拟机从该方法返回一个长度为零的数组。

Returns
StackTraceElement[] an array of StackTraceElement, each represents one stack frame.
Throws
SecurityException if a security manager exists and its checkPermission method doesn't allow getting the stack trace of thread.

也可以看看:

getState

Added in API level 1
Thread.State getState ()

返回此线程的状态。 此方法设计用于监视系统状态,而不是用于同步控制。

Returns
Thread.State this thread's state.

getThreadGroup

Added in API level 1
ThreadGroup getThreadGroup ()

返回此线程所属的线程组。 如果此线程已死(停止),此方法返回null。

Returns
ThreadGroup this thread's thread group.

getUncaughtExceptionHandler

Added in API level 1
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler ()

返回由于未捕获的异常而导致此线程突然终止时调用的处理函数。 如果此线程没有显式设置未捕获的异常处理程序,则返回此线程的ThreadGroup对象,除非此线程已终止,则返回null

Returns
Thread.UncaughtExceptionHandler

holdsLock

Added in API level 1
boolean holdsLock (Object obj)

当且仅当当前线程持有指定对象的监视器锁定时才返回 true

此方法旨在允许程序断言当前线程已保存指定的锁:

     assert Thread.holdsLock(obj);
 

Parameters
obj Object: the object on which to test lock ownership
Returns
boolean true if the current thread holds the monitor lock on the specified object.
Throws
NullPointerException if obj is null

interrupt

Added in API level 1
void interrupt ()

中断此线程。

除非当前线程正在自行中断,而这总是被允许的, checkAccess将调用此线程的 checkAccess方法,这可能会导致 SecurityException被抛出。

如果该线程阻塞的调用 wait()wait(long) ,或 wait(long, int)的方法 Object类,或者在 join()join(long)join(long, int)sleep(long) ,或 sleep(long, int) ,这个类的方法,那么它的中断状态将被清除,并且将收到 InterruptedException

如果该线程在 interruptible channel的I / O操作中被阻塞,则通道将被关闭,线程的中断状态将被设置,并且线程将收到 ClosedByInterruptException

如果此线程在 Selector被阻塞,那么线程的中断状态将被设置,并且它将立即从选择操作中返回,可能具有非零值,就好像调用了选择器的 wakeup方法一样。

如果以前的条件都不成立,那么该线程的中断状态将被设置。

中断不活动的线程不需要任何影响。

Throws
SecurityException if the current thread cannot modify this thread

interrupted

Added in API level 1
boolean interrupted ()

测试当前线程是否被中断。 线程的中断状态通过此方法清除。 换句话说,如果这个方法要连续调用两次,第二次调用将返回false(除非当前线程再次中断,在第一次调用清除其中断状态之后,第二次调用检查之前)。

线程中断被忽略,因为线程在中断时未处于活动状态,将通过返回false的此方法反映出来。

Returns
boolean true if the current thread has been interrupted; false otherwise.

也可以看看:

isAlive

Added in API level 1
boolean isAlive ()

测试此线程是否存在。 如果一个线程已经启动并且还没有死亡,那么这个线程是活着的。

Returns
boolean true if this thread is alive; false otherwise.

isDaemon

Added in API level 1
boolean isDaemon ()

测试此线程是否为守护程序线程。

Returns
boolean true if this thread is a daemon thread; false otherwise.

也可以看看:

isInterrupted

Added in API level 1
boolean isInterrupted ()

测试该线程是否被中断。 此线程的中断状态不受此方法的影响。

线程中断被忽略,因为线程在中断时未处于活动状态,将通过返回false的此方法反映出来。

Returns
boolean true if this thread has been interrupted; false otherwise.

也可以看看:

join

Added in API level 1
void join ()

等待这个线程死亡。

此方法的调用的行为与调用完全相同

join (0)

Throws
InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

join

Added in API level 1
void join (long millis)

此线程死亡最多等待millis毫秒。 0的超时意味着永远等待。

此实现使用this.wait调用的一个循环,条件为this.isAlive 当一个线程终止时,调用this.notifyAll方法。 建议应用程序不使用waitnotify ,或notifyAllThread实例。

Parameters
millis long: the time to wait in milliseconds
Throws
IllegalArgumentException if the value of millis is negative
InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

join

Added in API level 1
void join (long millis, 
                int nanos)

等待最多 millis毫秒加上 nanos纳秒以使此线程死亡。

该实现使用this.wait调用的一个循环,条件为this.isAlive 当一个线程终止时,调用this.notifyAll方法。 建议应用程序不使用waitnotify ,或notifyAllThread实例。

Parameters
millis long: the time to wait in milliseconds
nanos int: 0-999999 additional nanoseconds to wait
Throws
IllegalArgumentException if the value of millis is negative, or the value of nanos is not in the range 0-999999
InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

resume

Added in API level 1
void resume ()

此方法在API级别1中已弃用。
此方法仅供与suspend()使用,由于它容易出现死锁,因此已弃用。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

恢复暂停的线程。

首先,这个线程的checkAccess方法被调用时没有参数。 这可能会导致抛出SecurityException (在当前线程中)。

如果线程处于活动状态但暂停,它将被恢复并被允许在其执行过程中取得进展。

Throws
SecurityException if the current thread cannot modify this thread.

也可以看看:

run

Added in API level 1
void run ()

如果此线程是使用单独的Runnable运行对象构建的,则Runnable对象的run方法; 否则,此方法不做任何事情并返回。

Thread子类应该重写此方法。

也可以看看:

setContextClassLoader

Added in API level 1
void setContextClassLoader (ClassLoader cl)

为此线程设置上下文ClassLoader。 上下文ClassLoader可以在创建线程时设置,并允许线程的创建者通过getContextClassLoader提供适当的类加载器,以便在加载类和资源时在线程中运行的代码。

如果安全管理器存在,则使用 RuntimePermission ("setContextClassLoader")权限调用其 checkPermission方法,以查看是否允许设置上下文ClassLoader。

Parameters
cl ClassLoader: the context ClassLoader for this Thread, or null indicating the system class loader (or, failing that, the bootstrap class loader)
Throws
SecurityException if the current thread cannot set the context ClassLoader

setDaemon

Added in API level 1
void setDaemon (boolean on)

将此线程标记为daemon线程或用户线程。 当只有运行的线程都是守护进程线程时,Java虚拟机才会退出。

该方法必须在线程启动之前调用。

Parameters
on boolean: if true, marks this thread as a daemon thread
Throws
IllegalThreadStateException if this thread is alive
SecurityException if checkAccess() determines that the current thread cannot modify this thread

setDefaultUncaughtExceptionHandler

Added in API level 1
void setDefaultUncaughtExceptionHandler (Thread.UncaughtExceptionHandler eh)

设置当线程由于未捕获的异常而突然终止时调用的缺省处理程序,并且没有为该线程定义其他处理程序。

未捕获的异常处理首先由线程控制,然后由线程的ThreadGroup对象控制,最后由默认的未捕获异常处理ThreadGroup 如果线程没有明确的未捕获异常处理程序集,并且线程的线程组(包括父线程组)未专门化其uncaughtException方法,则将调用默认处理程序的uncaughtException方法。

通过设置默认的未捕获异常处理程序,应用程序可以更改处理未捕获异常的方式(例如登录到特定设备或文件),这些线程已经接受系统提供的任何“默认”行为。

请注意,默认的未捕获异常处理程序通常不应该延迟到线程的 ThreadGroup对象,因为这可能会导致无限递归。

Parameters
eh Thread.UncaughtExceptionHandler: the object to use as the default uncaught exception handler. If null then there is no default handler.
Throws
SecurityException if a security manager is present and it denies RuntimePermission ("setDefaultUncaughtExceptionHandler")

也可以看看:

setName

Added in API level 1
void setName (String name)

将此线程的名称更改为等于参数 name

首先调用这个线程的checkAccess方法,不带任何参数。 这可能会导致投掷SecurityException

Parameters
name String: the new name for this thread.
Throws
SecurityException if the current thread cannot modify this thread.

也可以看看:

setPriority

Added in API level 1
void setPriority (int newPriority)

改变这个线程的优先级。

首先调用此线程的checkAccess方法,不带任何参数。 这可能会导致投掷SecurityException

否则,此线程的优先级设置为指定的 newPriority和线程线程组的最大允许优先级中的较小者。

Parameters
newPriority int: priority to set this thread to
Throws
IllegalArgumentException If the priority is not in the range MIN_PRIORITY to MAX_PRIORITY.
SecurityException if the current thread cannot modify this thread.

也可以看看:

setUncaughtExceptionHandler

Added in API level 1
void setUncaughtExceptionHandler (Thread.UncaughtExceptionHandler eh)

设置由于未捕获的异常而导致此线程突然终止时调用的处理函数。

线程可以通过显式设置未捕获的异常处理程序来完全控制它如何响应未捕获的异常。 如果没有设置这样的处理程序,那么该线程的ThreadGroup对象充当其处理程序。

Parameters
eh Thread.UncaughtExceptionHandler: the object to use as this thread's uncaught exception handler. If null then this thread has no explicit handler.
Throws
SecurityException if the current thread is not allowed to modify this thread.

也可以看看:

sleep

Added in API level 1
void sleep (long millis, 
                int nanos)

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数加上指定的纳秒数,这取决于系统定时器和调度程序的精度和准确性。 该线程不会丢失任何监视器的所有权。

Parameters
millis long: the length of time to sleep in milliseconds
nanos int: 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
InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

sleep

Added in API level 1
void sleep (long millis)

使系统定时器和调度程序的精确性和准确性,使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数。 该线程不会丢失任何监视器的所有权。

Parameters
millis long: the length of time to sleep in milliseconds
Throws
IllegalArgumentException if the value of millis is negative
InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

start

Added in API level 1
void start ()

导致此线程开始执行; Java虚拟机调用此线程的run方法。

结果是两个线程同时运行:当前线程(从调用返回到 start方法)和另一个线程(它执行其 run方法)。

多次启动线程永远不合法。 特别是,线程一旦完成执行就不会重新启动。

Throws
IllegalThreadStateException if the thread was already started.

也可以看看:

stop

Added in API level 1
void stop ()

此方法在API级别1中已弃用。
这种方法本质上是不安全的。 停止螺纹与使用Thread.stop使其解锁所有它已经锁定(作为未选中的自然结果监视器的ThreadDeath异常堆栈向上传播)。 如果之前由这些监视器保护的任何对象处于不一致状态,则损坏的对象对其他线程可见,可能导致任意行为。 stop许多用途应该被代码替换,该代码只是修改某些变量以指示目标线程应该停止运行。 目标线程应该定期检查这个变量,并且如果变量指示它将停止运行,则从其run方法有序地返回。 如果目标线程等待很长时间(例如,在条件变量上),则应该使用interrupt方法来中断等待。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

强制线程停止执行。

如果安装了安全管理器, checkAccess this作为参数调用其checkAccess方法。 这可能会导致SecurityException被引发(在当前线程中)。

如果此线程与当前线程不同(即当前线程试图停止除本身之外的其他线程),则另外调用安全管理器的checkPermission方法(使用RuntimePermission("stopThread")参数)。 再次,这可能会导致投掷SecurityException (在当前线程中)。

此线程代表的线程都被迫停止不管它是异常做,并抛出一个新创建 ThreadDeath对象,作为异常。

允许停止尚未启动的线程。 如果线程最终启动,它会立即终止。

一个应用程序通常不应该尝试捕捉ThreadDeath除非它必须执行一些非凡的清理操作(注意ThreadDeath的抛出导致finally语句的try子句在线程正式死亡之前执行)。 如果catch子句捕获一个ThreadDeath对象,重新引入该对象以使线程实际上死亡非常重要。

对未捕获的异常做出反应的顶级错误处理程序不会输出消息或以其他方式通知应用程序,如果未捕获的异常是 ThreadDeath的实例。

Throws
SecurityException if the current thread cannot modify this thread.

也可以看看:

stop

Added in API level 1
void stop (Throwable obj)

此方法在API级别1中已弃用。
这种方法本质上是不安全的。 有关详细信息,请参阅stop() 这种方法的另一个危险是它可能被用来生成目标线程没有准备处理的异常(包括线程不可能抛出的检查异常,如果不是这种方法)。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

强制线程停止执行。

如果安装了安全管理器,则会调用此线程的 checkAccess方法,这可能会导致 SecurityException (在当前线程中)引发。

如果此线程与当前线程不同(即当前线程试图停止非线程本身),或者obj不是obj的实例,则ThreadDeath安全管理器的checkPermission方法(使用RuntimePermission("stopThread")参数) 。 再次,这可能会导致投掷SecurityException (在当前线程中)。

如果参数 obj为空, NullPointerException引发 NullPointerException (在当前线程中)。

由这个线程表示的线程被迫停止任何异常地执行,并且抛出Throwable对象为obj作为例外。 这是一个不寻常的行动; 通常,应该使用不带参数的stop方法。

允许停止尚未启动的线程。 如果线程最终启动,它会立即终止。

Parameters
obj Throwable: the Throwable object to be thrown.
Throws
SecurityException if the current thread cannot modify this thread.
NullPointerException if obj is null.

也可以看看:

suspend

Added in API level 1
void suspend ()

此方法在API级别1中已弃用。
此方法已被弃用,因为它本质上容易出现死锁。 如果目标线程在监视器上保留一个锁定,以便在暂停时保护关键系统资源,则在目标线程恢复之前,线程无法访问此资源。 如果在调用resume之前将恢复目标线程的线程尝试锁定此监视器, resume导致死锁。 这种僵局通常表现为“冻结”的过程。 有关更多信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

暂停此主题。

首先,这个线程的checkAccess方法被调用时没有参数。 这可能会导致投掷SecurityException (在当前线程中)。

如果线程处于活动状态,它将被暂停并且不会继续前进,除非和直到恢复。

Throws
SecurityException if the current thread cannot modify this thread.

也可以看看:

toString

Added in API level 1
String toString ()

返回此线程的字符串表示形式,包括线程的名称,优先级和线程组。

Returns
String a string representation of this thread.

yield

Added in API level 1
void yield ()

向调度程序提示当前线程愿意产生当前使用的处理器。 调度程序可以自由地忽略这个提示。

良率是一种启发式尝试,旨在改善线程之间的相对进程,否则会过度使用CPU。 它的使用应该与详细的性能分析和基准测试相结合,以确保它实际上具有预期的效果。

使用这种方法很少合适。 对于调试或测试目的可能有用,它可能有助于重现由于竞态条件而产生的错误。 在设计诸如java.util.concurrent.locks包中的并发控制结构时,它也可能很有用。

Protected methods

clone

Added in API level 1
Object clone ()

作为线程引发CloneNotSupportedException不能被有意克隆。 改为构建新的线程。

Returns
Object a clone of this instance.
Throws
CloneNotSupportedException always

Hooray!