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.

  • 相关阅读:
    你应该知道的4个DSP开发支持库
    你应该知道的4个DSP开发支持库
    Andrew Ng机器学习课程6
    Andrew Ng机器学习课程6
    你应该掌握的四种参数估计技术
    你应该掌握的四种参数估计技术
    李老师教人生道理
    李老师教人生道理
    迟到的间隔年
    迟到的间隔年
  • 原文地址:https://www.cnblogs.com/YDDMAX/p/5223190.html
Copyright © 2011-2022 走看看