本文转自http://www.cnblogs.com/linjiqin/p/3210004.html 感谢作者

守护线程与普通线程写法上基本没啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。

Daemon的作用是为其他线程的运行提供服务,比如说GC线程。其实User Thread线程和Daemon Thread守护线程本质上来说去没啥区别的,唯一的区别之处就在虚拟机的离开:如果User Thread全部撤离,那么Daemon Thread也就没啥线程好服务的了,所以虚拟机也就退出了。

守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。

setDaemon方法的详细说明:
public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java虚拟机退出。

该方法必须在启动线程前调用。

该方法首先调用该线程的checkAccess方法,且不带任何参数。这可能抛出SecurityException(在当前线程中)。

参数: 
on - 如果为 true,则将该线程标记为守护线程。 
抛出: 
IllegalThreadStateException - 如果该线程处于活动状态。 
SecurityException - 如果当前线程无法修改该线程。 
另请参见: 
isDaemon(), checkAccess()

  1. package cn.thread;
  2.  
  3. /**
  4. * 线程的调度(守护线程)
  5. *
  6. * @author 林计钦
  7. * @version 1.0 2013-7-24 上午09:30:42
  8. */
  9. public class ThreadDaemon {
  10.  
  11. public static void main(String[] args) {
  12. ThreadDaemon thread=new ThreadDaemon();
  13. Thread t1 = thread.new MyThread1();
  14. Thread t2 = new Thread(thread.new MyRunnable());
  15. t2.setDaemon(true); //设置为守护线程
  16.  
  17. t2.start();
  18. t1.start();
  19. }
  20.  
  21. class MyThread1 extends Thread {
  22. public void run() {
  23. for (int i = 0; i < 5; i++) {
  24. System.out.println("线程1第" + i + "次执行!");
  25. try {
  26. Thread.sleep(100);
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }
  32. }
  33.  
  34. class MyRunnable implements Runnable {
  35. public void run() {
  36. for (long i = 0; i < 9999999L; i++) {
  37. System.out.println("后台线程第" + i + "次执行!");
  38. try {
  39. Thread.sleep(7);
  40. } catch (InterruptedException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. }
  45. }
  46. }
  1. 后台线程第0次执行!
  2. 线程10次执行!
  3. 后台线程第1次执行!
  4. 后台线程第2次执行!
  5. 后台线程第3次执行!
  6. 后台线程第4次执行!
  7. 后台线程第5次执行!
  8. 后台线程第6次执行!
  9. 后台线程第7次执行!
  10. 后台线程第8次执行!
  11. 后台线程第9次执行!
  12. 后台线程第10次执行!
  13. 后台线程第11次执行!
  14. 后台线程第12次执行!
  15. 线程11次执行!
  16. 后台线程第13次执行!
  17. 后台线程第14次执行!
  18. 后台线程第15次执行!
  19. 后台线程第16次执行!
  20. 后台线程第17次执行!
  21. 后台线程第18次执行!
  22. 后台线程第19次执行!
  23. 后台线程第20次执行!
  24. 后台线程第21次执行!
  25. 后台线程第22次执行!
  26. 后台线程第23次执行!
  27. 后台线程第24次执行!
  28. 后台线程第25次执行!
  29. 线程12次执行!
  30. 后台线程第26次执行!
  31. 后台线程第27次执行!
  32. 后台线程第28次执行!
  33. 后台线程第29次执行!
  34. 后台线程第30次执行!
  35. 后台线程第31次执行!
  36. 后台线程第32次执行!
  37. 后台线程第33次执行!
  38. 后台线程第34次执行!
  39. 后台线程第35次执行!
  40. 后台线程第36次执行!
  41. 后台线程第37次执行!
  42. 后台线程第38次执行!
  43. 线程13次执行!
  44. 后台线程第39次执行!
  45. 后台线程第40次执行!
  46. 后台线程第41次执行!
  47. 后台线程第42次执行!
  48. 后台线程第43次执行!
  49. 后台线程第44次执行!
  50. 后台线程第45次执行!
  51. 后台线程第46次执行!
  52. 后台线程第47次执行!
  53. 后台线程第48次执行!
  54. 后台线程第49次执行!
  55. 后台线程第50次执行!
  56. 后台线程第51次执行!
  57. 线程14次执行!
  58. 后台线程第52次执行!
  59. 后台线程第53次执行!
  60. 后台线程第54次执行!
  61. 后台线程第55次执行!
  62. 后台线程第56次执行!
  63. 后台线程第57次执行!
  64. 后台线程第58次执行!
  65. 后台线程第59次执行!
  66. 后台线程第60次执行!
  67. 后台线程第61次执行!
  68. 后台线程第62次执行!
  69. 后台线程第63次执行!
  70. 后台线程第64次执行!
  71. 后台线程第65次执行!
  72. 后台线程第66次执行!
  73. 后台线程第67次执行!
  74. 后台线程第68次执行!
  75. 后台线程第69次执行!
  76. 后台线程第70次执行!

Java多线程-线程的调度(守护线程)的更多相关文章

  1. Python线程:线程的调度-守护线程

    Python线程:线程的调度-守护线程   守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.在python中建议使用的是thread. ...

  2. (Java多线程系列五)守护线程

    守护线程 什么是守护线程 Java中有两种线程,一种是用户线程,一种是守护线程. 当进程不存在或主线程停止,守护线程也会自动停止. class DaemonThread extends Thread ...

  3. Java中的守护线程和非守护线程(转载)

    <什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...

  4. Java多线程系列--“基础篇”10之 线程优先级和守护线程

    概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skyw ...

  5. Java 多线程基础(十一)线程优先级和守护线程

    Java 多线程基础(十一)线程优先级和守护线程 一.线程优先级 Java 提供了一个线程调度器来监控程序启动后进去就绪状态的所有线程.线程调度器通过线程的优先级来决定调度哪些线程执行.一般来说,Ja ...

  6. Java多线程(十)——线程优先级和守护线程

    一.线程优先级的介绍 java 中的线程优先级的范围是1-10,默认的优先级是5.“高优先级线程”会优先于“低优先级线程”执行. java 中有两种线程:用户线程和守护线程.可以通过isDaemon( ...

  7. java 多线程系列基础篇(十)之线程优先级和守护线程

    1. 线程优先级的介绍 java 中的线程优先级的范围是1-10,默认的优先级是5.“高优先级线程”会优先于“低优先级线程”执行. java 中有两种线程:用户线程和守护线程.可以通过isDaemon ...

  8. Java多线程系列 基础篇03 线程的优先级和守护线程

    1. 线程优先级 现代操作系统中基本上使用时间分片的方式调度线程,通过设置线程优先级,使优先级高的线程获得时间片的次数多于优先级低的线程. 在java 线程中,通过一个整形变量prority来控制优先 ...

  9. java 多线程之 线程优先级和守护线程

    线程优先级的介绍 java 中的线程优先级的范围是1-10,默认的优先级是5."高优先级线程"会优先于"低优先级线程"执行. java 中有两种线程:用户线程和 ...

随机推荐

  1. 62.在cdc文件上某些例化模块看不到的原因

    比如在顶层文件中,例化了几个模块,综合后打开cdc文件,会在structure/net中少几个例化模块,即看不到,但在顶层文件中还是存在的,只是ISE软件综合的问题而已,原因是在顶层或子模块中,有些应 ...

  2. 读Windows编程

    1.Windows是一个消息驱动系统.它通过把消息投入应用程序消息队列中或者把消息发送给合适的窗口消息处理程序,将发生的各种事件通知给应用程序 2.尽管一个动态链接库模块可能有其它扩展名(如.EXE或 ...

  3. iOS UIView的简单渐变效果

    这里主要用到了ios4.0以后 UIView的类方法 animateWithDuration: 函数原型包括以下类方法 + (void)animateWithDuration:(NSTimeInter ...

  4. Matlab 支持向量机(SVM)实现多分类

    1.首先,你需要安装完成Matlab. 2.将libsvm-3.17.zip和drtoolbox.tar文件解压到:libsvm-3.17文件夹和drtoolbox,并放到MATLAB的工具箱安装目录 ...

  5. 微软职位内部推荐-Sr SDE

    微软近期Open的职位: MSN reaches nearly half a billion people across the globe where we are the #1 portal in ...

  6. JS中的apply,call,bind深入理解

    在Javascript中,Function是一种对象.Function对象中的this指向决定于函数被调用的方式.使用apply,call 与 bind 均可以改变函数对象中this的指向,在说区别之 ...

  7. ASP.Net MVC中数据库数据导出Excel,供HTTP下载(转)

    转自http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于web ...

  8. hdu 3549 Flow Problem 网络流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Network flow is a well-known difficult problem f ...

  9. 【BZOJ】【1855】【SCOI2010】/【HDOJ】【3401】股票交易

    DP/单调队列优化 题解:http://www.cnblogs.com/jianglangcaijin/p/3799736.html 令f[i][j]表示第 i 天结束后,手里剩下 j 股的最大利润, ...

  10. JavaScript 中的 this

    JavaScript 语言中的 this 由于其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式.JavaSc ...