用户线程和守护线程

在java中有两类线程:user threa(用户线程)和 daemon
比较通俗的说:
任何一个守护线程都是真个jvm中所有非守护线程的保姆
只要当前jvm实例中上存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束的时候,守护线程随着jvm一同结束工作。
守护线程的线性应用就是:GC(垃圾回收器)

Thread thread = new Thread();  
 // 设定 daemonThread 为 守护线程,default false(非守护线程)  
thread.setDaemon(true);  
 // 验证当前线程是否为守护线程,返回 true 则为守护线程  
 daemonThread.isDaemon(); 

注意:

  1. thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
  2. 在Daemon线程中产生的新线程也是Daemon的。
  3. 不要认为所有的应用都可以分配给Daemon来进行服务,比如读写操作或者计算逻辑。 因为一旦user线程全部完成,无论daemon线程时候完成,虚拟机直接退出运行了

你可能感兴趣的:(多线程,java,thread,多线程)