zoukankan      html  css  js  c++  java
  • 《JAVA多线程编程核心技术》 笔记:第七章:拾遗增补

    一、线程的状态

    1.1 状态种类及理解:(一共6个)

    文字说明和理解:

    1. NEW状态:线程实例化后还从未执行start()方法时的状态;
    2. RUNNABLE状态:线程进入运行的状态;
    3. TERMINATED状态:线程被销毁时的状态;
    4. TIMED_WAITING状态:线程执行了Thread.sleep()方法,呈等待状态。等待时间达到,继续向下执行。(明确知道等待时间的状态
    5. BLOCKED状态:线程在等待锁的时候(是线程已经运行了,但是需要等待锁,此时无法继续运行,处于这种状态);
    6. WAITING状态:线程执行了wait()方法后所处的状态。(不知道等待时间,需被唤醒的状态。线程执行了wait(long)方法后是TIMED_WAITING状态)

    1.2 状态与方法之间的转变:

    1.3 状态切换:

    有的是单向切换,有的是双向切换

    二、线程组

    可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程。

    2.1 线程对象关联线程组

    1级关联:父对象中有子对象,但并不创建子孙对象。

    多级关联:父对象中有子对象,子对象中再创建子对象,出现子孙对象的效果。

    2.2 线程组自动归属特性

    自动归属:自动归属到当前线程组。

    实验表明:实例化一个线程组时,不指定所属的线程组,那么该线程组会自动归属当前线程对象所属的线程组中。

    2.3 根线程组:

    实例表示:JVM运行的根线程组是system,system之上没有其他线程组了。

    2.4 线程组内的线程批量停止:

    调用线程组的interript()方法时,会让线程组内的所有线程停止。但是线程组内的子线程组中的线程并不会停止。

    2.5 递归与非递归取得组内对象

    就是一个方法的参数而已...

    三、SimpleDateFormat非线程安全

    3.1 不安全的原因:

    这个i++或者i--那些是一样的,同一个对象,不同的线程进行操作,没有使用安全的synchronize操作,所以会读写不一致,出现了异常。

    3.2 解决方法:

    解决方法一:

    修改工具类,使每次线程操作都返回一个新的对象,使线程使用自己的变量,从而不互相操作对象,便线程安全了。

    解决方法二:

    使用TreadLocal来使每个线程都只操作自己的变量。原理和方法一一样,只是实现不同。

    四、线程和线程组的异常处理

    线程情况 处理方法
    一个单独的线程 使用 setUncaughtExceptionHandlee()对线程的异常进行捕捉和处理,不用try catch。
    同一线程对象的所有线程 setDefaultUncaughtExceptionHandlee()是对所有线程对象(由该类派生的所有的对象)的异常进行捕捉和处理,是一个批量操作,不需像setUncaughtExceptionHandlee()那样对每个线程进行单独处理。
    线程组内处理异常 实现一个线程异常后其他线程全部停止?
    重写线程组的UncaughtException()方法,在捕获到异常后,进行线程组的中断操作,那么所有线程都会终止。
    线程组内的一个线程出现异常,不会影响其他线程的执行。

    五、线程异常处理的传递

    单独对象异常处理 对象设置默认异常处理 线程组的异常处理 处理结果
    设置 设置(或未设置) 设置(或未设置) 只触发对象的异常处理;
    不会触发线程组的异常处理;
    未设置 设置 设置 触发对象默认的异常处理;
    同时触发线程组的异常处理;
    未设置 未设置 设置 只会触发线程组的异常处理;
    • 设置了对象异常处理:则只会触发对象的异常处理,其他(对象默认异常处理或线程组异常处理)不管是否设置都不会触发异常处理。
    • 没有设置对象异常处理:则其他设置了什么触发什么。

    END

  • 相关阅读:
    Qt计算器开发(三):执行效果及项目总结
    [HNOI2019]校园旅行
    How to fix nuget Unrecognized license type MIT when pack
    How to fix nuget Unrecognized license type MIT when pack
    git 通过 SublimeMerge 处理冲突
    git 通过 SublimeMerge 处理冲突
    git 上传当前分支
    git 上传当前分支
    gif 格式
    gif 格式
  • 原文地址:https://www.cnblogs.com/buwuliao/p/9538284.html
Copyright © 2011-2022 走看看