【摘要】:Java线程分为用户线程和守护线程。当进程中正在运行的线程都是守护线程时,JVM退出。守护线程中产生的新线程也是守护线程。守护线程不能用来执行文件、数据库的读写或执行计算等任务,因为当进程中没有用户线程时,JVM会退出,不会等待守护线程执行完毕,可能导致守护线程中的读写或计算等操作没有完成。演示守护线程效果。从结果可见,当main线程结束后,剩下的都是守护线程了,于是JVM退出了,而创建的守护线程1也随之终结了。
Java线程分为用户线程(user thread)和守护线程(daemon thread)。守护线程又称为后台线程或服务线程,优先级比较低,为其他线程提供服务。当进程中正在运行的线程都是守护线程时,JVM退出。例如,JVM垃圾回收线程就是典型的守护线程。Thread类public final boolean isDaemon()方法用于测试该线程是否为守护线程。Thread类public final void setDaemon(boolean on)方法用于将该线程标记为守护线程或用户线程。
关于守护线程需要注意以下几点:
(1)用户线程在启动前可以调用Thread对象的set Daemon(true)将该线程转化为守护线程,不能将正在运行的用户线程转化为守护线程。
(2)守护线程中产生的新线程也是守护线程。
(3)守护线程不能用来执行文件、数据库的读写或执行计算等任务,因为当进程中没有用户线程时,JVM会退出,不会等待守护线程执行完毕,可能导致守护线程中的读写或计算等操作没有完成。
【例6-3】
演示守护线程效果。
步骤1:定义一个守护任务类Damon Task,不断执行打印语句(死循环),如图6-7所示。(www.xing528.com)
图6-7 守护任务类DamonTask
步骤2:定义一个测试类Damen Thread Test,用于演示守护线程结束的过程,如图6-8所示。
图6-8 守护线程测试
在main线程(非守护线程)中,创建了一个线程对象t,并将其转化为守护线程,然后启动。从结果可见,当main线程结束后,剩下的都是守护线程了,于是JVM退出了,而创建的守护线程1也随之终结了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。