zoukankan      html  css  js  c++  java
  • Java线程之 InterruptedException 异常

     

    Java线程之 InterruptedException 异常

     

     当一个方法后面声明可能会抛出InterruptedException 异常时,说明该方法是可能会花一点时间,但是可以取消的方法。

    抛InterruptedException的代表方法有:

    1. Java.lang.Object 类的 wait 方法

    2. java.lang.Thread 类的 sleep 方法

    3. java.lang.Thread 类的 join 方法

    -- 需要花点时间的方法

    执行wait方法的线程,会进入等待区等待被notify/notify All。在等待期间,线程不会活动。

    执行sleep方法的线程,会暂停执行参数内所设置的时间。

    执行join方法的线程,会等待到指定的线程结束为止。

    因此,上面的方法都是需要花点时间的方法。

    -- 可以取消的方法

    因为需要花时间的操作会降低程序的响应性,所以可能会取消/中途放弃执行这个方法。

    这里主要是通过interrupt方法来取消。

    1. sleep方法与interrupt方法

    interrupt方法是Thread类的实例方法,在执行的时候并不需要获取Thread实例的锁定,任何线程在任何时刻,都可以通过线程实例来调用其他线程的interrupt方法。

    当在sleep中的线程被调用interrupt方法时,就会放弃暂停的状态,并抛出InterruptedException异常,这样一来,线程的控制权就交给了捕捉这个异常的catch块了。

    2. wait方法和interrupt方法

    当线程调用wait方法后,线程在进入等待区时,会把锁定接触。当对wait中的线程调用interrupt方法时,会先重新获取锁定,再抛出InterruptedException异常,获取锁定之前,无法抛出InterruptedException异常。

    3. join方法和interrupt方法

    当线程以join方法等待其他线程结束时,一样可以使用interrupt方法取消。因为join方法不需要获取锁定,故而与sleep一样,会马上跳到catch程序块

    -- interrupt方法干了什么?

    interrupt方法其实只是改变了中断状态而已。

    而sleep、wait和join这些方法的内部会不断的检查中断状态的值,从而自己抛出InterruptEdException。

    所以,如果在线程进行其他处理时,调用了它的interrupt方法,线程也不会抛出InterruptedException的,只有当线程走到了sleep, wait, join这些方法的时候,才会抛出InterruptedException。若是没有调用sleep, wait, join这些方法,或者没有在线程里自己检查中断状态,自己抛出InterruptedException,那InterruptedException是不会抛出来的。

    isInterrupted方法,可以用来检查中断状态

    Thread.interrupted方法,可以用来检查并清除中断状态。

    ----------------------------------------------------

    本文主要内容来自Java多线程设计模式一书

    微信公众号【黄小斜】大厂程序员,互联网行业新知,终身学习践行者。关注后回复「Java」、「Python」、「C++」、「大数据」、「机器学习」、「算法」、「AI」、「Android」、「前端」、「iOS」、「考研」、「BAT」、「校招」、「笔试」、「面试」、「面经」、「计算机基础」、「LeetCode」 等关键字可以获取对应的免费学习资料。 

                         

  • 相关阅读:
    learnyou 相关网站
    hdu 3038 How Many Answers Are Wrong
    hdu 3047 Zjnu Stadium 并查集高级应用
    poj 1703 Find them, Catch them
    poj 1182 食物链 (带关系的并查集)
    hdu 1233 还是畅通工程
    hdu 1325 Is It A Tree?
    hdu 1856 More is better
    hdu 1272 小希的迷宫
    POJ – 2524 Ubiquitous Religions
  • 原文地址:https://www.cnblogs.com/xll1025/p/6415378.html
Copyright © 2011-2022 走看看