【Java多线程学习笔记】suspend及resume方法的缺点——不同步

阅读: 评论:0

【Java多线程学习笔记】suspend及resume方法的缺点——不同步

【Java多线程学习笔记】suspend及resume方法的缺点——不同步

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() {@Overridepublic void run() {myObject.setValue("a","aa");};};thread1.setName("a");thread1.start();Thread.sleep(500);Thread thread2 = new Thread() {@Overridepublic void run() {myObject.printUsernamePassword();};};thread2.start();}
}

执行结果:

解释:thread1线程设置username的值后暂停,并没有给password赋值。thread2读取了此过程中的值,导致读取只赋值到一半的值,出现不同步问题。

本文发布于:2024-01-28 02:16:14,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063793804067.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23