因为马上毕业了,最近一直在复习Java的基础知识,多线程当然是重点了,今天上午一直在看线程的生命阶段,其中有过时的方法suspend用来挂起一个线程。而关于该方法为何被抛弃了,看了开发文档中是这么描述的:【方法已经遭到反对,因为它具有固有的死锁倾向。如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,则在目标线程重新开始以前任何线程都不能访问该资源。如果重新开始目标线程的线程想在调用resume
之前锁定该监视器,则会发生死锁。】
看完上面的官方文档,光看文字把头都看晕了,感觉sleep和suspend对挂起线程的操作感觉又模糊了不少,尤其是对锁的控制上面。
因此就模拟了两个线程,代码如下:
package a.b;
public class Test {
private static final int INDEX = 10;
public static void main(String[] args) {
try {
// 定义线程
Thread tchild = new Thread(new Runnable() {
public void run() {
try {
int a = 0;
for (long i = 0; i < 1000000; i++) {
while (a < INDEX)/** 如果在执行这句的时候调用了tchild.suspend(),那就不会导致死锁 */
a++;
}
S