java中的线程优先级的范围是1~10.默认的优先级是5。”高优先级线程”会优先于“低优先级线程”执行。 线程的优先级将该线程的重要性传递给了调度器。尽管CPU处理现有线程集的顺序是不确定的,但是调度器倾向于让优先权最高的线程先执行。然而,这并不是意味着优先权较低的线程得不到执行(即优先权并不会导致死锁),优先级低的线程仅仅是执行的频率较低。 Java中有两种线程:用户线程和守护线程。 可以通过isDaemon()方法来区别它们:如果返回false。则说明该线程是“用户线程;否则就是“守护线程”。 用户线程一般用于执行用户级任务,而守护线程,即后台线程,一般用来执行后台任务。并且这种线程并不属于程序中不可或缺的部分,当所有非后台线程(用户线程)结束时,程序也就终止了,同时会杀死进程中的所有的后台线程;也就是说,只要有非后台线程还在运行,程序就不会终止。
其中两次运行结果如下:
main(5)t2(10),loop0t2(10),loop1t2(10),loop2t1(1),loop0t2(10),loop3t1(1),loop1t2(10),loop4t1(1),loop2t1(1),loop3t1(1),loop4main(5)t2(10),loop0t2(10),loop1t2(10),loop2t2(10),loop3t2(10),loop4t1(1),loop0t1(1),loop1t1(1),loop2t1(1),loop3t1(1),loop4通过对比可以得到,高优先级只是体现出执行的频率会更高,也不是一直占用。
运行结果如下:
main(isDaemon=false)t2(isDaemon=true), loop 0t2(isDaemon=true), loop 1t2(isDaemon=true), loop 2t1(isDaemon=false),loop0t2(isDaemon=true), loop 3t2(isDaemon=true), loop 4t1(isDaemon=false),loop1t2(isDaemon=true), loop 5t2(isDaemon=true), loop 6t2(isDaemon=true), loop 7t2(isDaemon=true), loop 8t1(isDaemon=false),loop2t2(isDaemon=true), loop 9t2(isDaemon=true), loop 10t2(isDaemon=true), loop 11t1(isDaemon=false),loop3t2(isDaemon=true), loop 12t2(isDaemon=true), loop 13t1(isDaemon=false),loop4t2(isDaemon=true), loop 14将线程t2设置为守护线程,而主线程和线程t1为用户线程,当用户线程执行完毕后,只有线程t2这个守护线程时,JVM会自动退出。
文章只是作为自己的学习笔记,借鉴了网上的许多案例,如果觉得阔以的话,希望多交流,在此谢过…
新闻热点
疑难解答