Java多线程——线程优先级与守护线程(Daemon Thread)

一、线程优先级

每个线程都可以通过thread.setPriority()实现进程优先级的设置。可设置的范围在1-10之间,如果超过此范围将抛出异常throw new IllegalArgumentException()。每个线程的默认优先级为5。

tips:即使将某个线程的优先级高于另一个线程的优先级,并不意味着这个线程每次都能获得cpu资源,只是有比较大的可能性占用cpu资源。所以即使一个线程等级是10级,一个是1级,在执行操作时还是有可能会出现交替执行的现象。

二、守护线程

线程分类为:用户线程(User Thread)、守护线程(Daemon Thread)

守护线程不是程序中不可或缺的部分,当所有的非守护线程结束时,程序也将随之终止,同时杀死进程中的所有守护线程。反之而言,只要任何非守护线程还在运行,程序就不会终止。

实现方法:调用Thread对象的setDaemon(true)方法来实现。

Tips:

(1)thread.setDaemono(true)必须在thread.start()之前设置,否则会抛出一个IllegalThreadStateException异常,不能将正在运行的常规线程设置为守护线程。

(2)在Daemon线程中产生的新线程也是Daemon的。

(3)守护线程应该永远不去访问固有资源,如文件,数据库,因为他会在任何时候甚至一个操作的中间发生中断。

例子:垃圾回收线程,当程序中不再有任何运行的线程时,程序就不会产生垃圾,所有也不需要垃圾回收线程。

猜你喜欢

转载自blog.csdn.net/szt292069892/article/details/81382003