线程的状态及属性

2019-03-15  本文已影响0人  爱做梦的严重精神病患者

1.线程状态

线程状态.jpg

  当用new操作符创建一个新线程时,该线程还没有开始运行。一旦调用start方法线程处于runnable状态。一旦一个线程开始运行,它不必始终保持运行。
  运行中的线程被中断,目的是为了让其他线程获得运行机会。抢占式调度系统每一个可运行线程一个时间片来执行任务。当时间片用完,操作系统剥夺该线程的运行权,并给另一个线程运行。当选择下一个线程时,操作系统考虑线程的优先级。
  所有的桌面以及服务器操作系统都使用抢占式调度,类似手机的小型设备可能使用协作式调度(被唤醒的高优先级任务不可以打断正在运行的低优先级任务)。
  在具有多个处理器的机器上,每个处理器运行一个线程,可以有多个线程并行运行。如果线程的数目多于处理器的数目,调度器依然采用时间片机制。

  线程因以下两个原因之一而被终止:

2.线程属性

①线程优先级

  每一个线程都有一个优先级。默认情况下,一个线程继承它的父线程的优先级。每当线程调度器有机会选择新线程时,它首先选择具有较高优先级的线程
  不要过度使用线程优先级。不要将程序构建为其功能的正确性依赖于优先级。

②未捕获异常处理器

  线程run方法抛出非受查异常,会导致线程终止。但是,不需要任何catch子句来处理可以被传播的异常。在线程死亡之前,异常就被传递到一个用于未捕获异常的处理器。
  该处理器必须属于一个实现Thread.UncaughtExceprionHandler接口的类。这个接口只有一个方法

void uncaughtException(Thread t, Throwable e)

  可以用setUncaughtExceptionHandler方法为任何线程安装一个处理器。也可以利用Thread类的静态方法setDefaultUncaughtExceptionHandler为所有线程安装一个默认的处理器。
  如果不安装默认的处理器,默认的处理器为空。如果不为独立的线程安装处理器,此时的处理器就是该线程的ThreadGroup(线程组)对象。

  线程组是一个可以统一管理线程的集合。默认情况下,创建的所有线程属于相同的线程组。建议不要在自己的程序中使用线程组。

上一篇 下一篇

猜你喜欢

热点阅读