(四)线程属性_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > (四)线程属性

(四)线程属性

 2011/10/25 8:12:38  sgq0085  http://sgq0085.iteye.com  我要评论(0)
  • 摘要:线程属性包括:线程优先级、守护线程、线程组和处理未捕获异常的处理器。1.线程优先级在Java程序设计语言中,每一个线程都有一个优先级。默认情况下,一个线程继承它的父线程的优先级。可以将优先级设置为MIN_PRIORITY(在Thread类中定义为1)与MAX_PRIORITY(定义为10)之间的任何值。每当线程调度器有机会选择新线程时,它首先选择有较高优先级的线程。注意:线程优先级是高度依赖于系统的。当虚拟机依赖于宿主机平台的线程实现机制时,JAVA的优先级被映射到宿主机平台的优先级上
  • 标签:线程
线程属性包括:线程优先级、守护线程、线程组和处理未捕获异常处理器

1.线程优先级
在Java程序设计语言中,每一个线程都有一个优先级。默认情况下,一个线程继承它的父线程的优先级。可以将优先级设置为MIN_PRIORITY(在Thread类中定义为1)与MAX_PRIORITY(定义为10)之间的任何值。
每当线程调度器有机会选择新线程时,它首先选择有较高优先级的线程。注意:线程优先级是高度依赖于系统的。当虚拟机依赖于宿主机平台的线程实现机制时,JAVA的优先级被映射到宿主机平台的优先级上,优先级个数也许更多,也许更少。Windows有7个优先级别。Linux下线程的优先级被忽略--所有线程具有相同的优先级。
注意:如果有几个高优先级的线程没有进入非活动状态,低优先级的线程可能永远也不能执行。

2.守护线程
setDaemon(true) : 将线程转换为守护线程(daemon thread)。守护线程的唯一作用是为其他线程提供服务。当只剩下守护线程时,虚拟机就退出了。
注意:守护线程应该永远不去访问固有资源,如文件、数据库。因为它会在任何时候甚至在一个操作的中间发生中断。
e.g.计时线程定时发送“时间嘀嗒”信号给其他线程或清空过时的高速缓存项的线程。

3.未捕获异常处理
原因:线程的run方法不能抛出任何被检测的异常,但是,不被检测的异常会导致线程终止。在这种情况下,线程就死亡了。
处理办法:不需要任何catch子句来处理可以被传播的异常。相反,就在线程死亡之前,异常被传递到一个用于未捕获异常的处理器。
未捕获异常的处理器:
(1).该处理器必须属于一个实现了Thread.UncaughtExceptionHandler接口的类。该类只有一个方法 void uncaughtException(Thread t, Throwable e)
(2).也可以用Thread类的静态方法setDefaultUncaughtExceptionHandler为所有的线程安装一个默认的处理器。
替换处理器可以使用日志API发送未捕获异常的报告到日志文件。
如果不安装默认的处理器,默认处理器(getDefaultUncaughtExceptionHandler)为空。但是,如果不为独立的线程安装处理器(getUncaughtExceptionHandler),此时的处理器就是该线程的ThreadGroup对象。
注意 : 线程组是一个可以统一管理的线程集合。默认情况下,创建的所有线程属于相同的线程组,但是,也可能会建立其他的组。从Java SE 5.0起引入了更好的特性用于线程集合的操作。不要在自己的程序中使用线程组。
ThreadGroup类实现Thread.UncaughtExceptionHandler接口,它的uncaughtException方法做如下操作:
(1).如果该线程组有夫线程组,那么父线程组的uncaughtException方法被调用。
(2).否则,如果Thread.getDefaultExceptionHandler方法返回一个非空的处理器,则调用该处理器
(3).否则,如果Throwable是ThreadDeath的一个实例,什么都不做。
(4).否则,线程的名字以及Throwable的栈踪迹被输出到System.err上。
发表评论
用户名: 匿名