CS-Notes 学习笔记
Java 后端 · Java 并发

怎样停止一个正在运行的线程?

先自己想一想,再看参考要点

参考要点

  • 靠协作:其它线程设置 volatile 停止标记或调用 interrupt(),由线程自己检查后在合适的位置结束
  • 线程在 sleep()、wait()、join() 中时 interrupt() 使其抛出 InterruptedException,捕获后是否结束由代码决定,只设停止标记唤醒不了它
  • 循环中没有这类调用时,用 interrupted() 检查中断标记后退出
  • interrupt() 不能中断等待 synchronized 锁的阻塞,平台线程阻塞在传统 I/O 上时通常也不响应
  • Thread.stop() 可能留下修改了一半的数据,JDK 20 起直接抛出 UnsupportedOperationException
  • 线程池中可以用 Future 的 cancel(true) 中断单个任务
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。