《Java多线程编程核心技术(第2版)》 —1.12.3 suspend()方法与resume()方法的缺点—数据不完整

举报
华章计算机 发表于 2020/02/08 15:32:52 2020/02/08
【摘要】 本节书摘来自华章计算机《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()方法。

image.png

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。