您想要设计一个程序,除了主线程之外,其运用了一个线程于背景进行相关运算工作,您的程序可能像是这样:
package onlyfun.caterpillar; 您的线程已经运行到最后一个陈述了,这时应该是工作结束的时候,但您的另一个线程还在运作,您怎么停止它?在最后加上一行使用System.exit ()?这虽然也可以,但这只是强迫程序结束,而且这个方法并不是随时可以适用! 一个Daemon线程是一个在背景执行服务的线程,例如网路服务器倾听连接埠的服务、隐藏的系统线程如垃圾收集线程或其它JVM 建立的线程,如果所有的非Daemon的线程都结束了,则Daemon线程自动就会终止。 从Main函数开始的是一个非Daemon线程,如果您希望某个线程在非Daemon线程都结束后也跟着终止,那么您要将它设定为Daemon执行 绪,下面这个程序是个简单的示范:
package onlyfun.caterpillar; 这个程序在主线程结束之后,Daemon也就跟着结束了,所以它不会像上面这个程序,不断的列印T字节;您可以使用setDaemon()方法来设定一 个线程是否为Daemon线程,使用isDaemon()方法则可以判断该线程是否为Daemon线程。 基本上,Java默认所有从Daemon线程产生的线程也是Daemon线程,这很直觉,由一个背景服务线程衍生出来的线程,也应该是为了在背 景服务而产生的,所以在该停止时也应该停止。 |