java并发编程学习之脏读代码示例及处理
来源:互联网 发布:feynman 知乎 编辑:程序博客网 时间:2024/06/13 00:22
public class Thread10 { public static void main(String[] args) { Thread10_Entity entity = new Thread10_Entity(); Thread10_1 t10_1 = new Thread10_1(entity); t10_1.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(entity.get()); }}class Thread10_1 extends Thread { private Thread10_Entity thread10_Entity; public Thread10_1(Thread10_Entity t10) { this.thread10_Entity = t10; } @Override public void run() { thread10_Entity.set("admin", "admin"); }}class Thread10_Entity { private String username = "user"; private String password = "user"; synchronized void set(String username, String password) { this.username = username; try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.password = password; } String get() { return username + " " + password; }}
运行结果:admin user
加上sleep只是为了放大错误,便于观察。
有任何疑问欢迎留言或者加企鹅群(282034885)讨论
那么如何避免脏读呢?上篇文章( java并发编程学习之一段简单代码证明synchronized锁的是对象)中提到过,synchronized锁的是对象,这里就可以用上了。
在get方法上加上synchronized关键字即可,在set没处理完之前,对对象加锁,避免其他线程进行脏读。
1 0
- java并发编程学习之脏读代码示例及处理
- Java Socket编程详解及示例代码
- Java开发代码规范之编程规约(八)——并发处理
- JAVA并发编程学习笔记之synchronized
- JAVA并发编程学习笔记之ReentrantLock
- JAVA并发编程学习笔记之synchronized
- JAVA并发编程学习笔记之synchronized
- JAVA并发编程学习笔记之ReentrantLock
- JAVA并发编程学习笔记之synchronized
- JAVA并发编程学习笔记之synchronized
- java 并发编程学习之二 ---- lock
- java 并发编程学习之三 ---- ReentrantLock
- Java并发编程-27-异常处理及取消任务
- Java并发之CyclicBarrier示例
- 初学Java Socket编程详解及示例代码
- Java并发编程学习
- 【Java开发手册之编程规约(六)】并发处理
- 并发编程<五>并发处理之synchronized
- UI day 19 UICollectionView
- Git@OSC代码托管(含Git教程!important非命令行)
- 选择排序复习
- UI day 20 iOS FMDB自己封装的单例类
- UI day 21 程序 进程 线程 GCD 共产党
- java并发编程学习之脏读代码示例及处理
- LeetCode 14:Longest Common Prefix
- UI day 22 block动画 CAlayer动画
- 工程优化作业——成功失败法和黄金分割法
- Android Service使用Messenger通信
- 129Sum Root to Leaf Numbers
- PHP学习练手(三)
- linux提权辅助工具 – Linux_Exploit_Suggester
- 经典SQL语句大全