1、簡介
suspend():暫停線程
resume():恢復線程
兩個方法均已過時,原因之一就是兩種方法的使用可能造成程序問題:1、數據不同步;2、獨佔
本文先解釋第一種問題:
代碼如下,本文內容部分引自《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讀取了此過程中的值,導致讀取只賦值到一半的值,出現不同步問題。