A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马新乐 黑马帝   /  2011-12-26 01:29  /  2464 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么setDaemon(boolean on)方法必须在启动线程前调用?还有传的参数有什么意义?

5 个回复

倒序浏览
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。
守护线程(Daemon)
Java有两种Thread:“守护线程Daemon”与“用户线程User”。
守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。
任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开:
用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。
守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。

setDaemon(boolean on)方法必须在线程启动之前调用,是因为当线程正在运行时调用会产生异常。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon方法将测试该线程是否为守护线程。值得一提的是,当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。

C:\Documents and Settings\Administrator\桌面

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。  
该方法必须在启动线程前调用。
该方法首先调用该线程的 checkAccess 方法,且不带任何参数。这可能抛出 SecurityException。
参数:
on - 如果为 true,则将该线程标记为守护线程。
抛出:
IllegalThreadStateException - 如果该线程处于活动状态。
SecurityException - 如果当前线程无法修改该线程。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
方法setDaemon(true),则可以将其设置为守护线程。
  此方法的详细说明:
  public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。
  该方法必须在启动线程前调用。
  该方法首先调用该线程的 checkAccess 方法,且不带任何参数。这可能抛出 SecurityException(在当前线程中)。
  参数:
  on - 如果为 true,则将该线程标记为守护线程。
  抛出:
  IllegalThreadStateException - 如果该线程处于活动状态。
  SecurityException - 如果当前线程无法修改该线程。
 

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
后台进行,为了在程序运行的时候在后台提供一种通用的服务线程。
注意:当所有非后台线程结束后,会杀死所有的后台进程!
比如你的你写的一个程序,需要一个线程来辅助,当你的程序结束了,那个线程留着也没有用
这样你的辅助线程可设为守护线程,但前台进程结束了,守护进程自动结束

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马