在如下代码的情况下suspend()和resume()方法能正常执行。
但是它有如下两个问题,很容易造成死锁,导致java将其弃用(建议使用wait和notify,park和unpark):
一、在外面加上synchronized关键字,这样就会造成死锁,因为这两个方法执行后都不释放锁(执行可以吧注释的放开测试)。
二、把下面代码resume()方法和suspend()方法位置换下执行也会造成死锁
import static java.lang.Thread.sleep;
public class ThreadCommunication {
public static void main(String[] args) {
final ThreadCommunication obj = new ThreadCommunication();
Thread t = new Thread("thread"){
@Override
public void run() {
System.out.println(getName()+"方法suspend()运行开始");
// synchronized (obj) {
suspend();//挂起方法
//}
try {
sleep(1300);//让子线程在主线程执行resume方法之前没跑完
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName()+"方法suspend()运行完毕");
}
};
t.start();
System.out.println("沉睡1秒。。。");
try {
sleep(1000);//让子线程先运行
System.out.println(t.getName() + "方法resume()运行开始");
//synchronized (obj) {
t.resume();//继续方法
//}
System.out.println(t.getName() + "方法resume()运行完毕");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}