互联网并发编程之一 线程安全03线程中的脏读
来源:互联网 发布:安卓java游戏大全 编辑:程序博客网 时间:2024/06/16 20:33
当一个线程运行修改数据的方法,另一个线程启动读取数据的值,会读到未修改的前的数据
package com.jc.thread;public class Thread04 {private String name = "abc";private String password = "123";public synchronized void setValue(String name, String password) {try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.name = name;this.password = password;}public void getValue() {System.out.println(this.name);System.out.println(this.password);}public static void main(String[] args) {final Thread04 thread04 = new Thread04();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {thread04.setValue("jkl", "333");}}, "t1");t1.start();try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}thread04.getValue();}}输出结果为:
abc
123
对于对象的同步或者异步方法,我们在设计程序的时候一定要考虑整体性,不然会出现不一致的问题,很经典的错误就是脏读,当setValue()和getValue()同时加上synchronized 关键字,保证了业务的原子性。
package com.jc.thread;
public class Thread04 {
private String name = "abc";
private String password = "123";
public synchronized void setValue(String name, String password) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.name = name;
this.password = password;
}
public synchronized void getValue() {
System.out.println(this.name);
System.out.println(this.password);
}
public static void main(String[] args) {
final Thread04 thread04 = new Thread04();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
thread04.setValue("jkl", "333");
}
}, "t1");
t1.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thread04.getValue();
}
}
输出结果为:
jkl
333
- 互联网并发编程之一 线程安全03线程中的脏读
- 互联网并发编程之一 线程安全01
- 互联网并发编程之一 线程安全02
- 并发编程の线程安全
- 【Java并发编程实践】— 线程安全
- 【Java并发编程一】线程安全
- java并发编程基础之线程安全
- 并发编程六:线程安全与共享资源
- java并发编程实践_02线程安全
- Java并发编程实战2-线程安全
- 并发编程之线程安全HashMap_ConcurrentHashMap
- 《并发编程》--15.线程安全的HashMap
- java并发编程:线程安全-线程同步-synchronized和lock
- java并发:线程安全
- 并发4-线程安全
- java-并发-线程安全
- java-并发-线程安全
- 互联网架构(3):并发编程--线程池
- 程序员进阶的这五个瞬间,你到哪个阶段了?
- 干货!程序员进好公司的面试技巧
- Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置
- 宏和函数
- vue-cli工程化
- 互联网并发编程之一 线程安全03线程中的脏读
- Fatal error in launcher: Unable to create process using 错误解决 以及python3安装scrapy
- 教学评估?别烦,看这!
- 亚马逊高级应用科学家熊元骏:人类行为理解研究进展 | 直播实录·PhD Talk
- C语言发展史
- DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES
- 小程序12.12
- 学习笔记七-AuthenticationProvider
- 谷歌网的一些伦理风险行为收集