对于"线程对立"所举案例的思考
书中描述“线程对立”的原文
线程对立是指不管调用端是否采取了同步措施,都无法在多线程环境中并发使用代码。由于Java语言天生就支持多线程的特性,线程对立这种排斥多线程的代码是很少出现的,而且通常都是有害的,应当尽量避免。
一个线程对立的例子是Thread类的suspend()和resume()方法。如果有两个线程同时持有一个线程对象,一个尝试去中断线程,一个尝试去恢复线程,在并发进行的情况下,无论调用时是否进行了同步,目标线程都存在死锁风险——假如suspend()中断的线程就是即将要执行resume()的那个线程,那就肯定要产生死锁了。也正是这个原因,suspend()和resume()方法都已经被声明废弃了。
我的问题
原文中:
假如suspend()中断的线程就是即将要执行resume()的那个线程,那就肯定要产生死锁了
这句话听起来很奇怪,怎么也想不通为什么会产生死锁,无奈之下只能阅读源码查证。
阅读源码查证
Thread::suspend()源码:
/**
* Suspends this thread.
* <p>
* First, the <code>checkAccess</code> method of this thread is called
* with no arguments. This may result in throwing a
* <code>Securit