1、简介
suspend():暂停线程
resume():恢复线程
两个方法均已过时,原因之一就是两种方法的使用可能造成程序问题:
1、数据不同步;
本文先解释第一种问题:
代码如下,本文内容部分引自《Java多线程编程核心技术》,推荐一读!!!
2、suspend及resume方法的缺点——不同步
package suspend_resume_nosameValue;
/**
* @author chengsw
* @create 2019-06-29 15:52
*/
public class MyObject {
private String username = "1";
private String password = "11";
public void setValue(String u, String p) {
this.username = u;
if (Thread.currentThread().getName().equals("a")) {
System.out.println("停止a线程!");
Thread.currentThread().suspend();
}
this.password = p;
}
public void printUsernamePassword() {
System.out.println(username + " " + password);
}
}
package suspend_resume_nosameValue;
/**
* @author chengsw
* @create 2019-06-29 16:06
*/
public class Run {
public static void main(String[] args) throws InterruptedException {
final MyObject myObject = new MyObject();
Thread thread1 = new Thread() {
@Override
public void run() {
myObject.setValue("a","aa");
};
};
thread1.setName("a");
thread1.start();
Thread.sleep(500);
Thread thread2 = new Thread() {
@Override
public void run() {
myObject.printUsernamePassword();
};
};
thread2.start();
}
}
执行结果:
解释:thread1线程设置username的值后暂停,并没有给password赋值。thread2读取了此过程中的值,导致读取只赋值到一半的值,出现不同步问题。