java.lang
类 Thread

java.lang.Object
  

java.lang.Thread
所有已实现的接口:
Runnable

public class Threadextends Objectimplements Runnable

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

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

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

  • 调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。
  • 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。

创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:


     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 时作为一个参数来传递并启动。采用这种风格的同一个例子如下所示:


     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();

每个线程都有一个标识名,多个线程可以同名。如果线程创建时没有指定标识名,就会为其生成一个新名称。

从以下版本开始:
JDK1.0
另请参见:
Runnable, Runtime.exit(int), run(), stop()

嵌套类摘要
static class Thread.State
线程状态。
static interface Thread.UncaughtExceptionHandler

当 Thread
因未捕获的异常而突然终止时,调用处理程序的接口。
字段摘要
static int MAX_PRIORITY

线程可以具有的最高优先级。
static int MIN_PRIORITY

线程可以具有的最低优先级。
static int NORM_PRIORITY

分配给线程的默认优先级。
构造方法摘要
Thread()

分配新的 Thread 对象。
Thread(Runnable target)

分配新的 Thread 对象。
Thread(Runnable target,
String name)

分配新的
Thread 对象。
Thread(String name)

分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target)

分配新的 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
所引用的线程组的一员,并具有指定的堆栈大小。
Thread(ThreadGroup group, String name)

分配新的 Thread 对象。
方法摘要
static int activeCount()

返回当前线程的线程组中活动线程的数目。
void checkAccess()

判定当前运行的线程是否有权修改该线程。
int countStackFrames()

已过时。 该调用的定义依赖于 suspend(),但它遭到了反对。此外,该调用的结果从来都不是意义明确的。
static Thread currentThread()

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

已过时。 该方法最初用于破坏该线程,但不作任何清除。它所保持的任何监视器都会保持锁定状态。不过,该方法决不会被实现。即使要实现,它也极有可能以
suspend()
方式被死锁。如果目标线程被破坏时保持一个保护关键系统资源的锁,则任何线程在任何时候都无法再次访问该资源。如果另一个线程曾试图锁定该资源,则会出现死锁。这类死锁通常会证明它们自己是“冻结”的进程。有关更多信息,请参阅为何不赞成使用
Thread.stop、Thread.suspend 和 Thread.resume?
。
static void dumpStack()

将当前线程的堆栈跟踪打印至标准错误流。
static int enumerate(Thread[] tarray)

将当前线程的线程组及其子组中的每一个活动线程复制到指定的数组中。
static Map<Thread,StackTraceElement[]> getAllStackTraces()

返回所有活动线程的堆栈跟踪的一个映射。
ClassLoader getContextClassLoader()

返回该线程的上下文 ClassLoader。
static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()

返回线程由于未捕获到异常而突然终止时调用的默认处理程序。
long getId()

返回该线程的标识符。
String getName()

返回该线程的名称。
int getPriority()

返回线程的优先级。
StackTraceElement[] getStackTrace()

返回一个表示该线程堆栈转储的堆栈跟踪元素数组。
Thread.State getState()

返回该线程的状态。
ThreadGroup getThreadGroup()

返回该线程所属的线程组。
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()

返回该线程由于未捕获到异常而突然终止时调用的处理程序。
static boolean holdsLock(Object obj)

当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。
void interrupt()

中断线程。
static boolean interrupted()

测试当前线程是否已经中断。
boolean isAlive()

测试线程是否处于活动状态。
boolean isDaemon()

测试该线程是否为守护线程。
boolean isInterrupted()

测试线程是否已经中断。
void join()

等待该线程终止。
void join(long millis)

等待该线程终止的时间最长为 millis 毫秒。
void join(long millis,
int nanos)

等待该线程终止的时间最长为 millis 毫秒 +
nanos 纳秒。
void resume()

已过时。 该方法只与 suspend() 一起使用,但
suspend()
已经遭到反对,因为它具有死锁倾向。有关更多信息,请参阅为何不赞成使用
Thread.stop、Thread.suspend 和 Thread.resume?
。
void run()

如果该线程是使用独立的 Runnable 运行对象构造的,则调用该
Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
void setContextClassLoader(ClassLoader cl)

设置该线程的上下文 ClassLoader。
void setDaemon(boolean on)

将该线程标记为守护线程或用户线程。
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。
void setName(String name)

改变线程名称,使之与参数 name 相同。
void setPriority(int newPriority)

更改线程的优先级。
void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

设置该线程由于未捕获到异常而突然终止时调用的处理程序。
static void sleep(long millis)

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
static void sleep(long millis,
int nanos)


在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
void start()

使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
void stop()

已过时。 该方法具有固有的不安全性。用 Thread.stop
来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath
异常的一个自然后果)。如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将对其他线程可见,这有可能导致任意的行为。stop
的许多使用都应由只修改某些变量以指示目标线程应该停止运行的代码来取代。目标线程应定期检查该变量,并且如果该变量指示它要停止运行,则从其运行方法依次返回。如果目标线程等待很长时间(例如基于一个条件变量),则应使用
interrupt 方法来中断该等待。有关更多信息,请参阅为何不赞成使用
Thread.stop、Thread.suspend 和 Thread.resume?
。
void stop(Throwable obj)

已过时。 该方法具有固有的不安全性。有关详细信息,请参阅 stop()。该方法的附加危险是它可用于生成目标线程未准备处理的异常(包括若没有该方法该线程不太可能抛出的已检查的异常)。有关更多信息,请参阅为何不赞成使用
Thread.stop、Thread.suspend 和 Thread.resume?
。
void suspend()

已过时。 该方法已经遭到反对,因为它具有固有的死锁倾向。如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,则在目标线程重新开始以前任何线程都不能访问该资源。如果重新开始目标线程的线程想在调用
resume 之前锁定该监视器,则会发生死锁。这类死锁通常会证明自己是“冻结”的进程。有关更多信息,请参阅为何不赞成使用
Thread.stop、Thread.suspend 和 Thread.resume?
。
String toString()

返回该线程的字符串表示形式,包括线程名称、优先级和线程组。
static void yield()

暂停当前正在执行的线程对象,并执行其他线程。






从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Thread类详解的更多相关文章

  1. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

  2. java.lang.Thread类详解

    java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...

  3. thread 类详解

    java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...

  4. 并发编程(四)Thread类详解

    一.引言 Thread类中存在着许多操作线程的方法,学习Thread类是非常有必要的,前面我们也嘘唏了创建线程的几种方式,若线程的创建不是以继承Thread类的方式创建的,那我们又改如何使用Threa ...

  5. C#中的多线程使用 -- Thread 类详解(转)

    现在C#已经建议摈弃使用 Suspend, Resume 暂停/恢复线程, 也尽量少用 Abort方法中断一个线程. 建议使用线程的同步手段有: Mutex.ManualResetEvent.Auto ...

  6. Java知多少(58)线程Runnable接口和Thread类详解

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  7. Thread类详解 多线程中篇(二)

    Java.lang.Thread是Java应用程序员对Java多线程的第一站,Thread就是对Java线程本身的抽象 所以在Java中的线程编程概念中,一个Thread实例 == 一个线程 线程有哪 ...

  8. java之AbstractStringBuilder类详解

    目录 AbstractStringBuilder类 字段 构造器 方法   public abstract String toString() 扩充容量 void  expandCapacity(in ...

  9. Java线程创建形式 Thread构造详解 多线程中篇(五)

    Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...

随机推荐

  1. SQLserver查询数据库所有字段-表名

    SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='Account' SELECT (case when a.colorder=1 t ...

  2. DB2查询结果显示n行

    在SQLserver中语法是这样的:select top n * from staff ,即可查询显示n行数据 但是在DB2中语法是这样的,感觉比较接近英语. select * from STAFF ...

  3. hdu 4857 逃生

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能 ...

  4. js 与或运算符 || && 妙用(转)

    原文转自:http://www.jb51.net/article/21339.htm 首先出个题: 假设对成长速度显示规定如下: 成长速度为5显示1个箭头: 成长速度为10显示2个箭头: 成长速度为1 ...

  5. RCF

    1. RCF: 纯c++的RPC, 不引入IDL, 大量用到boost,比较强大.2. casocklib:  protobuf + asio 较完善实现3. eventrpc: protobuf + ...

  6. PHP闭包(Closure)初探

    不知不觉发现PHP已经出到了5.5版本,而自己一直在用PHP5.2,让我看起来像深山出来的小伙子一样,又土又落后.在我习惯在javascript中使用闭包之后,忽然间对PHP的闭包打起了兴趣. 于是乎 ...

  7. Spark 3000门徒第二课scala面向对象总结

    昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...

  8. [转]JSON与XML的区别比较

    1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...

  9. 三星wep200蓝牙耳机中文说明书

    给耳机充电:耳机内部装有充电电池,第一次使用之前电一定要充满1,先将耳机放入所提供的充电盒中,关上盖.2,将配置器的接头插入充电盒的座孔内.并将另一端插入电源插座.*充电一直充到耳机指示灯由红变蓝*大 ...

  10. C# 天气预报

    问题描述: 使用C#做一个简易的天气预报系统 问题解决: 主要使用类如下: WeatherLoc:包含常用的调用中国气象局天气情况接口 using System; using System.Colle ...