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.

  • 相关阅读:
    [NOI2008] 糖果雨
    [NOI2006] 神奇口袋
    [NOI2014] 购票
    Prince and Princess HDU
    Network POJ
    CodeForces
    Codeforces Global Round 12
    Codeforces Round #688 (Div. 2)
    [USACO05DEC]Layout G
    # Technocup 2021
  • 原文地址:https://www.cnblogs.com/YDDMAX/p/5223190.html
Copyright © 2011-2022 走看看