Java线程

状态

生命周期

核心方法

阻塞

终止

中断

守护线程

守护线程是为其他线程提供服务的线程。JVM退出时会自动回收守护线程。

1
mThread.setDaemon(true);

典型的就是GC线程。

未捕获异常处理器

线程的run方法不能包抛出任何检查型异常,但是非检查型异常会导致线程终止。

可以通过实现Thread.UncaughtExceptionHandler接口,自定义一个未捕获异常处理器:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
//创建线程
Thread t = new Thread();
//创建处理器
UncaughtExceptionHandler handler = new UncaughtExceptionHandler();
//设置处理器
t.setUncaughtExceptionHandler(handler);
//设置全局默认处理器
Thread.setDefaultUncaughtExceptionHandler(handler);


static class UncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{

    @Override
    public void uncaughtException(@NonNull Thread t, @NonNull Throwable e) {
        //可以做异常采集、打印日志
    }
}

线程优先级

可以使用void setPriority(int newPriority)设置线程优先级,值在1~10,默认为5。系统自带的常量如下:

默认情况下,线程会继承创建他自身的线程的优先级。

当线程调度器有机会选择新线程时,优先选择高优先级。

线程间通信