线程的优先级和守护线程
线程的优先级
java中线程的优先级范围是1-10,默认优先级是5 ,1最低10最高
高优先级线程会尽量优先于低优先级线程去执行,只是尽量做到,更不能保证高优先级线程一定在低优先级线程执行完成前完成,是不能保证的。
线程优先级的特性
具有继承性:
线程A启动线程B,A,B具有相同优先级
规则性:
CPU尽量把处理资源优先给高优先级的线程先用,但是不一定优先级大的线程先执行完。
线程优先级的随机性:
即使设置了两个优先级差距很大的两个线程,也无法保证执行先后,线程运行具有随机性。并不能保证执行先后顺序。
两种线程
1:用户线程
执行用户级的任务
2:守护线程
后台线程,一般执行后台任务。
用idDaemon()方法来区别,如果返回false,则是用户线程,否则是守护线程
java虚拟机在用户线程都结束后,会退出
GC线程就是个守护线程
守护线程:
守护线程是指在程序运行的时候在后台提供一种通用服务的线程。
守护线程并不属于程序中不可或缺的一部分,如垃圾回收线程。
当所有用户线程结束后时,程序也就终止了,同时会杀死进程中的所有守护线程。
用户线程VS守护线程
如果用户线程已经全部退出运行了,虚拟机也就退出了
如果没有被守护者了,守护线程也就没有工作可做了,也没有必要留下来了。
守护线程
并不是jvm虚拟机内部特有的
Thread.setDaemon()可以设置守护线程,但是一定要在线程跑起来之前设置,否则没有作用,反而会抛出IllegalThreadStateException异常
守护线程创建的子线程也是守护线程
总结
线程有优先级之分,优先级从1到10,默认优先级5
优先级高的线程尽量比优先级低的线程先运行
线程优先级特性:继承性,规则性,随机性
Java中线程分两种,用户线程和守护线程
守护线程在jvm线程中所有用户线程结束后退出
用户可以手动创建守护线程
网友评论