美文网首页
线程的状态及属性

线程的状态及属性

作者: 爱做梦的严重精神病患者 | 来源:发表于2019-03-15 10:48 被阅读0次

    1.线程状态

    • New(新创建)
    • Runnable(可运行)
    • Blocked(被阻塞)
    • Waiting(等待)
    • Timed waiting(计时等待)
    • Terminated(被终结)
    线程状态.jpg

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

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

    • 因run方法的正常退出而自然死亡
    • 因为一个没有捕获的异常终止了run方法而意外死亡

    2.线程属性

    ①线程优先级

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

    ②未捕获异常处理器

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

    void uncaughtException(Thread t, Throwable e)
    

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

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

    相关文章

      网友评论

          本文标题:线程的状态及属性

          本文链接:https://www.haomeiwen.com/subject/tmwkmqtx.html