《Java多线程编程核心技术(第2版)》 —1.12.3 suspend()方法与resume()方法的缺点—数据不完整
【摘要】 本节书摘来自华章计算机《Java多线程编程核心技术(第2版)》 一书中第1章,第1.12.3节,作者是高洪岩。
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()方法。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)