suspend():暂停线程
resume():恢复线程
两个方法均已过时,原因之一就是两种方法的使用可能造成程序问题:
1、数据不同步;
2、独占
本文先解释第一种问题:
代码如下,本文内容部分引自《Java多线程编程核心技术》,推荐一读!!!
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 条评论) |