本文主要是介绍【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读取了此过程中的值,导致读取只赋值到一半的值,出现不同步问题。
这篇关于【Java多线程学习笔记】suspend及resume方法的缺点——不同步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!