线程设置为守护线程的过程之源码分析
1 守护线程和用户线程的区别
1.1线程分为用户线程和守护线程,默认都是用户线程
1.2虚拟机必须确保用户线程执行完毕,但是不会等待守护线程执行完毕
1.3守护线程使用场景:操作日志 监控内存 垃圾回收
1.4当用户线程结束,守护线程也会跟着结束
2 守护线程是怎么创建的
2.1设置为守护线程的方法setDaemon,默认是传false,默认是用户线程,调用这个方法即可将线程设置为守护线程
public final void setDaemon(boolean on) {
checkAccess();
if (isAlive()) {
throw new IllegalThreadStateException();
}
daemon = on;
}
3 在设置线程为守护的线程的过程,会检验这个线程是否已经启动,已经是否有权限修改
checkAccess(); 校验权限
public final void checkAccess() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkAccess(this);
}
}
判断线程是否存活,因此要在启动之前设置守护线程标识,如果已经启动则无法设置,抛出异常<