1.sleep
该方法为静态方法,一个需要传入毫秒数,另外一个传入毫秒和纳秒数。
sleep
方法会使当前线程进入指定时间休眠,但是休眠期间,不会释放 monitor 锁的所有权。
可使用 TimeUnit
替代 Thread.sleep
。
当线程正在 sleep
时,调用中断方法中断该线程,会抛出异常。
2.yield
该方法会提醒调度器当前线程愿意放弃当前的CPU资源,如果CPU资源不紧张,则会忽略这种提醒。会使当前线程从 RUNNING
状态切换到 RUNNABLE
状态。
3.setPriority
设置线程优先级。优先级在 1-10 期间,值越大,优先级越大。
如果不设置优先级,会遵从父类优先级。
如果设置优先级,优先级在 1-10 期间,如果大于所在组的最大优先级,会设置为线程组所在最大优先级。main
线程的优先级为 5。
public final void setPriority(int newPriority) {
ThreadGroup g;
checkAccess();
if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {
throw new IllegalArgumentException();
}
if((g = getThreadGroup()) != null) {
if (newPriority > g.getMaxPriority()) {
newPriority = g.getMaxPriority();
}
setPriority0(priority = newPriority);
}
}
4.线程ID
getId()
,获取线程 ID ,线程的ID在整个JVM进程中都会是唯一的。
5.当前线程
currentThread()
6.线程上下文类加载器
getContextClassLoader()
如果没有设置类加载器,则保持与父线程同样的类加载器。
7.线程interrupt
public void interrupt()
public boolean isInterrupted()
public static boolean interrupted()
-
interrupt
-
在一个线程内部存在着名为
interrupt flag
的标识,如果一个线程被interrupt
,那么它的flag
将被设置。如果当前线程正在执行可中断方法被阻塞时,调用interrupt
方法将其中断,反而会导致flag
被清除。
isInterrupted
-
是一个成员方法。主要判断当前线程是否被中断,该方法仅仅对
interrupt
标识的一个判断,并不会影响标识发生任何改变。
interrupted
-
该方法是一个静态方法,其也用于判断当前线程是否被中断,该方法会直接擦除掉线程的
interrupt
标识。
8.join
join
方法也是一个可中断的方法。
在 A 线程中,调用 B 线程的B.join()
方法,会使 A 线程处于 BLOCKED
状态,直至 B线程结束或者B线程达到给定时间。
9.关闭线程
-
stop(不建议使用)
- 该方法标注过时,而且使用该方法关闭线程,会使关闭的线程可能不会释放 monitor 的锁。不建议使用。 正常关闭
- 线程正常退出。 捕获中断信号关闭线程
- 通过捕获中断信号进行关闭线程。 使用 volatile 开关控制
- 定义一个变量使用 volatile 修饰。 异常退出
- 不论Thread 中的 run 方法,还是 Runnable 中的 run 方法,是不允许抛出checked异常的。 进程假死
- 程序不进行任何作业,就像死了一样,事实上它是没有死的,这个程序出现阻塞或者死锁情况。