stop:停止,直接停止线程的运行
为什么线程的stop方法被过期?因为它非常不安全,停止一个线程会导致他释放所有他持有的锁,而释放锁未导致很多临界的共享变量直接在一个不稳定的状态下呗其他线程操作,
你不知道线程运行到什么情况,根本无法控制什么时间点去停止一个线程。可能导致线程的某个临界区变量直接因为锁的释放,被其他线程开始操作,导致不一致的情况
替代方法:使用中断语句来操作
suspend:使暂停
resumed:恢复
最主要他会导致线程处于Runnable的状态,这点会导致错误的排查会很难
1.suppend导致占用的锁不会被释放,最明显的情况System.out.println这个看似没有锁的步骤,实际实现带啦是有加锁的过程,这也会导致这个锁也不会被释放。导致接下来其他的打印语句都不会被调用
2.suppend和resumed如果执行的顺序没有控制好,会导致先被恢复,再执行暂停,就会导致锁一直不被释放
替代方法:使用LockSupport工具类来暂停线程和恢复线程。关键字: park和unpark语句
LockSupport使用类似信号量的机制来解决这个问题:
unpark会导致信号量可用,这样即使先调用了unpark也会让park方法变得可用,不用担心先后的问题
park会导线线程处于waiting的状态,而且会标注是park导致的,而且还能支持中断的影响