《Java多线程编程核心技术(第2版)》 —1.12.3 suspend()方法与resume()方法的缺点—数据不完整
1.12.3 suspend()方法与resume()方法的缺点—数据不完整
在使用suspend()方法与resume()方法时也容易出现线程暂停,进而导致数据不完整的情况。
创建项目suspend_resume_nosameValue,文件MyObject.java代码如下:
package myobject;
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);
}
}
文件Run.java代码如下:
package test;
import myobject.MyObject;
public class Run {
public static void main(String[] args) throws InterruptedException {
final MyObject myobject = new MyObject();
Thread thread1 = new Thread() {
public void run() {
myobject.setValue("a", "aa");
};
};
thread1.setName("a");
thread1.start();
Thread.sleep(500);
Thread thread2 = new Thread() {
public void run() {
myobject.printUsernamePassword();
};
};
thread2.start();
}
}
程序运行结果如图1-59所示。
程序运行结果出现值不完整的情况,所以在程序中使用suspend()方法要格外注意。
这两个方法被标识为作废过期的,想要实现对线程进行暂停与恢复的处理,可使用wait()、notify()或notifyAll()方法。
- 点赞
- 收藏
- 关注作者
评论(0)