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