zoukankan      html  css  js  c++  java
  • 线程结束的正确方式

    1、Thread.suspend(),Thread.resume(),Thread.stop()方法都已经废弃了,因为可能导致死锁。

    2、抛出InterruptedException将导致中断标识位复位

    3、多线程编程一定要注意阻塞语句,阻塞一定不能长久的阻塞,应该能被interrupt,否则则可能会永久的锁住线程。

    4、ThreadPoolExecutor采取的都是Thread.interrupt()来结束线程。

    5、结束线程的3种方式:(程序里面2和3都应该包含)

           1、自己设置业务结束标志(一般使用volatile设置一个标志)

           2、调用interrupt()来中断线程,被中断的线程如果处于可相应中断的阻塞状态(NIO),则能在InterruptedException里面结束

           3、调用interrupt()来中断线程,被中断的线程不能响应中断异常

                  此时分为两种情况:1、线程处于阻塞状态

                                                非NIO的IO操作    可以通过关闭IO底层资源来触发被中断线程响应IOException,然后在IOException里面通过Thread.interrupted()来判断是否被中断来结束

                                                synchronized和Lock的加锁操作     怎么解决中断?         Lock可以通过可中断的加锁方式,但是synchronized呢

                                           2、非阻塞状态

                                                通过Thread.interrupted()来判断是否被中断来结束

    6、在处理线程结束的代码里需要使用try{}finally{}代码,具体的模板可以参见Thing in java.

  • 相关阅读:
    3503: [Cqoi2014]和谐矩阵
    2734: [HNOI2012]集合选数
    P3900 [湖南集训]图样图森破
    4557: [JLoi2016]侦察守卫
    牛客OI周赛6-提高组 B 践踏
    连续区间的最大公约数
    Wannafly挑战赛5 D. 子序列
    牛客国庆集训派对Day1 B. Attack on Titan
    4538: [Hnoi2016]网络
    [SHOI2015]超能粒子炮·改
  • 原文地址:https://www.cnblogs.com/YDDMAX/p/5223190.html
Copyright © 2011-2022 走看看