什么是用户线程,什么是守候线程?什么是守护进程?

时间:2022-04-06 05:06:45
有的人说,线程总体分两类:用户线程和守候线程。但是却没说明白什么是用户线程,什么是守候线程?有什么区别?我在程序里写的属于哪个阿?
还有,有的人还说,有守护进程。守护进程又是什么东东呢?我们的项目程序里怎么没有阿?

9 个解决方案

#1


忘了。忘得干干净净的~~

#2


守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出)   
    
    
  所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。   
    

#3


怎么没人回答阿。还没有令人满意的答案呢:(

#4


2楼的不是回答?

额。。。。。太恶心了 被无视了

#5


有鸡蛋就砸,哈哈

#6


一个线程调用void setDaemon(boolean on)方法可以将自己设置成一个守护(Daemon)线程。例如thread.setDaemon(true);线程默认是非守护线程,非守护线程也称用户线程。当程序中的所有线程都结束运行时,即使守护线程的run()方法中还有需要执行的语句,守护线程也立刻结束。
通常在程序运行是会出现如下问题:main方法结束了,但java程序没有结束?
解决方案是:对java来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个程序只有后台进程运行,这个进程就会结束。在启动start()方法之前调用setDaemon(true)方法可以将线程变成后台线程。

#7


用户线程:是你自己写的,可以手工调用;
守护线程(Daemon Thread):简单的说就是是后台线程,
     --他只在后台运行
     --他不需要手工调用,自动运行;
     --他的任务是为其他线程服务;(jvm垃圾回收就是典型的后台线程)
     --当所有前台线程死亡,后台线程生命结束。
   (前台所有线程死亡后,JVM会自动通知后台线程死亡)
===前台线程要变成后台线程要在线程start()之前,否则会报错

#8


你还问线程和进程的区别是吧;
当一个程序进入内存时,他就变成了一个进程(简单的说就是运行中的程序)
---进程是系统进行资源分配的和调度的一个独立单位;

简单的说,程序(每当你启动一个程序会产生很多的进程)==》程序由进程组成(如任务管理器中的结束程序进程)==》而进程由线程组成(线程被封装在任务管理器中看不见);

进程有三大特性:1.独立性
                2.动态性
                3.并发性
稍微复杂点的说线程与进程的关系是:线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须拥有一个父进程; 线程是独立运行的线程不知道进程中是否还有其他线程;线程的执行时抢占式的,线程可以拥有自己的堆栈自己的程序设计器和自己的局部变量~~~(他们的区别太多了,我捡重要的概括一下吧)
总的来说线程比进程有优点:
--进程间不能共享内存,但线程可以;
--系统创建进程需要为该进程重新分配系统资源,但创建线程代价小的多(进程占用内存大,很消耗cpu;线  
   程占内存很小)且线程可以实现多线程(实现多任务并发···);
--线程容易调度

#9


上面说的很清楚了。

lz可以继续看线程间通信

#1


忘了。忘得干干净净的~~

#2


守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出)   
    
    
  所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。   
    

#3


怎么没人回答阿。还没有令人满意的答案呢:(

#4


2楼的不是回答?

额。。。。。太恶心了 被无视了

#5


有鸡蛋就砸,哈哈

#6


一个线程调用void setDaemon(boolean on)方法可以将自己设置成一个守护(Daemon)线程。例如thread.setDaemon(true);线程默认是非守护线程,非守护线程也称用户线程。当程序中的所有线程都结束运行时,即使守护线程的run()方法中还有需要执行的语句,守护线程也立刻结束。
通常在程序运行是会出现如下问题:main方法结束了,但java程序没有结束?
解决方案是:对java来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个程序只有后台进程运行,这个进程就会结束。在启动start()方法之前调用setDaemon(true)方法可以将线程变成后台线程。

#7


用户线程:是你自己写的,可以手工调用;
守护线程(Daemon Thread):简单的说就是是后台线程,
     --他只在后台运行
     --他不需要手工调用,自动运行;
     --他的任务是为其他线程服务;(jvm垃圾回收就是典型的后台线程)
     --当所有前台线程死亡,后台线程生命结束。
   (前台所有线程死亡后,JVM会自动通知后台线程死亡)
===前台线程要变成后台线程要在线程start()之前,否则会报错

#8


你还问线程和进程的区别是吧;
当一个程序进入内存时,他就变成了一个进程(简单的说就是运行中的程序)
---进程是系统进行资源分配的和调度的一个独立单位;

简单的说,程序(每当你启动一个程序会产生很多的进程)==》程序由进程组成(如任务管理器中的结束程序进程)==》而进程由线程组成(线程被封装在任务管理器中看不见);

进程有三大特性:1.独立性
                2.动态性
                3.并发性
稍微复杂点的说线程与进程的关系是:线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须拥有一个父进程; 线程是独立运行的线程不知道进程中是否还有其他线程;线程的执行时抢占式的,线程可以拥有自己的堆栈自己的程序设计器和自己的局部变量~~~(他们的区别太多了,我捡重要的概括一下吧)
总的来说线程比进程有优点:
--进程间不能共享内存,但线程可以;
--系统创建进程需要为该进程重新分配系统资源,但创建线程代价小的多(进程占用内存大,很消耗cpu;线  
   程占内存很小)且线程可以实现多线程(实现多任务并发···);
--线程容易调度

#9


上面说的很清楚了。

lz可以继续看线程间通信