java线程发生异常线程被打断, 和调用stop() ,有什么区别吗?

线程发生异常线程被打断, 和调用stop() ,有什么区别吗?

阅读 1.6k
1 个回答

线程发生异常

首先,线程发生异常线程被打断, 要分情况说:

  1. 主线程发生异常, 会停止运行;
  2. 子线程发生异常, 主线程却不为所动, 扔会继续运行;
    主线程try-catch也捕捉不到;那怎么捕捉呢?
    2.1. 在子线程本身run方法中try-catch可以;
    2.2. 在主线程中实现自己的UncaughtExceptionHandler,并设置为子线程的处理器, 捕捉子线程中的异常(生产上可以用来记录日志, 发布告警系统等)

调用stop()

stop()方法已被标注 @Deprecated API中明确说明:

使用Thread.stop停止线程可以解锁所有已锁定的监视器, 如果先前受这些监视器保护的任何对象处于不一致的状态,则损坏的对象将变得对其他线程可见,可能导致任意行为
线程被强制停止

也就是容易造成脏数据, 导致不安全

正确停止线程的方法

应该想需要被停止的线程调用interrupt()发送中断信号, 然后由接收信号的线程来监控并处理(或停止); 这才是正确的优雅的停止线程的方式;

希望对你有用!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题