您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 1浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java多线程 面试题 如何停止线程& 如何处理不可中断的阻塞

java持续实践 发布时间:2020-08-29 11:01:12 ,浏览量:1

文章目录
      • 如何停止线程
      • 如何处理不可中断的阻塞

如何停止线程
  1. 原理 用interrupt 来处理的好处 可以保证数据安全, 可以把主动权交给被中断的线程.

  2. 想要停止线程, 需要请求方, 被停止方, 子方法被调用方相互配合 请求方, 调用interrupt()方法, 发出中断的信号 . 被停止方, 在每次的循环或者适当的时候, 去检查中断的信号, 判断该线程是否被中断了. 并且在可能抛出InterruptedException异常的时候, 去处理中断信号. 每一个被中断的线程, 都应该去做这样的操作, 以便于可以被安全的停止. 子方法的最佳实践: 1 优先在方法层抛出异常, 以便于其他人去做相应的处理. 2 或者在收到中断信号后, 在catch语句中, 再次设为中断的状态.

  3. 错误的方法 stop/suspend已经被废弃. volatile的boolean方法无法处理长时间阻塞的情况. 这种阻塞的状态, 在生产环境很有可能发生.

如何处理不可中断的阻塞

在io操作, 或者ReentrantLock的时候, 可能会发生不可中断的阻塞 .

暂时没有通用的解决方案, 要针对不同的锁和不同的io操作,给出特定的解决方案.

例如ReentrantLock这个锁提供了public void lockInterruptibly() throws InterruptedException 这个方法 , 专门的用于响应中断信号.

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0399s