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

  • 相关阅读:
    SonarQube代码质量管理平台安装与配置
    特殊字符大全
    测试“用户登录”功能
    通用测试用例大全
    k8s dashboard 部署并使用 kubeconfig 登陆
    k8s cert-manager 部署
    nginx ingress部署
    Harbor 安装
    kubernetes 高可用集群1.14 部署
    shell 免密远程执行
  • 原文地址:https://www.cnblogs.com/buwuliao/p/9538284.html
Copyright © 2011-2022 走看看