getId()
这个方法返回线程的 ID 值,类型为 long。线程的 ID 在线程的整个生命周期中都不变。
getPriority()和setPriority()
这两个方法控制线程的优先级。调度程序处理线程优先级的策略之一是,如果有优先级高的线程在等待,就不运行优先级低的线程。不过,大多数情况下都无法影响调度程序解释优先级的方式。线程的优先级使用 1~10 之间的整数表示。
setName()和getName()
开发者使用这两个方法设定或取回单个线程的名称。为线程起名字是个好习惯,因为这样调试时更方便,尤其是使用 jvisualvm 等工具。13.2 节会介绍如何使用 jvisualvm。
getState()
返回一个 Thread.State 对象,说明线程处于什么状态。表示状态的各个值在 6.5.1 节介绍过。
isAlive()
用来测试线程是否还“活着”。
start()
这个方法用来创建一个新应用线程,然后再调用 run() 方法调度这个线程,开始执行。正常情况下,执行到 run() 方法的末尾或者执行 run() 方法中的一个 return 语句后,线程就会结束运行。
interrupt()
如果调用 sleep()、wait() 或 join() 方法时阻塞了某个线程,那么在表示这个线程的 Thread 对象上调用 interrupt() 方法,会让这个线程抛出 InterruptedException 异常(并把线程唤醒)。如果线程中涉及可中断的 I/O 操作,那么这个 I/O 操作会终止,而且线程会收到 ClosedByInterruptException 异常。即便线程没有从事任何可中断的操作,线程的中断状态也会被设为 true。
join()
在调用 join() 方法的 Thread 对象“死亡”之前,当前线程一直处于等待状态。可以把这个方法理解为一个指令,在其他线程结束之前,当前线程不会继续向前运行。
setDaemon()
用户线程是这样一种线程,只要它还“活着”,进程就无法退出——这是线程的默认行为。有时,程序员希望线程不阻止进程退出——这种线程叫守护线程。一个线程是守护线程还是用户线程,由 setDaemon() 方法控制。
setUncaughtExceptionHandler()
线程因抛出异常而退出时,默认的行为是打印线程的名称、异常的类型、异常消息和堆栈跟踪。如果这么做还不够,可以在线程中安装一个自定义的处理程序,处理未捕获的异常。