`
gongmingwind
  • 浏览: 578853 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

守护线程(转载补充)

JVM 
阅读更多
守护线程是为其他线程的运行提供便利的线程。守护线程不会阻止程序的终止。

Java的垃圾收集机制的某些实现就使用了守护线程。

非守护线程包括常规的用户线程或诸如用于处理GUI事件的事件调度线程。

程序可以包含守护线程和非守护线程。

程序只有守护线程时,该程序便可以结束运行。

如果要使一个线程成为守护线程,则必须在调用它的start方法之前进行设置(通过以true作为参数调用线程的setDaemon方法,可以将该线程定义为一个守护线程),否则会抛出IllegalThreadStateException异常。如果线程是守护线程,则isDaemon方法返回真。

注:
  • 1、如果在线程已经启动后,再试图使该线程成为守护线程,则会导致IllegalThreadStateException异常
  • 2、事件调度线程是一个无穷循环的线程,而不是守护线程。因而,在基于窗口的应用程序调用System类的exit方法之前,事件调度线程不会终止。
  • 3、不能将关键任务分配给守护线程(如:如写数据文件,计算逻辑等)。这些任务将会在事先没有警告的情况下终止,这可能导致不能正确地完成它们



守护线程和非守护线程的关键不同点:
     守护线程不会阻止程序的终止(或称为:不会阻止JVM的退出) ,当所有非守护线程都已经结束,则JVM就可以退出了。
      而非守护线程会阻止JVM的退出,必须所有非守护线程都执行完了才行,除非是强制推出。
      典型的守护线程例子是JVM中的系统资源自动回收线程,它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。


      

       
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics