java多线程脏读演式
2017-09-04 13:13
330 查看
public class Account {
String name;
double balance; //余额
public synchronized void set(String name,double balance){ //set 方法写入余额
this.name = name;
try {
Thread.sleep(2000); //中断这个线程扩大问题,不然执行时间短看不出效果
} catch (InterruptedException e) {
e.printStackTrace();
}
this.balance = balance;
}
public /*synchronized*/ double getBalance(String name){ //读取余额 不加锁会产生脏读,解决方法就是读时也加锁!
return this.balance;
}
public static void main(String[] args) {
Account a = new Account();
new Thread(()->a.set("zhansan",100.00)).start(); //执行线程,"()->a.set("zhansan",100.00)",java1.8才支持,开辟一个新线程执行a的set方法.
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(a.getBalance("zhangsan")); //第一次读取时还未写入~读取到默认值. 执行结果 : 0.0
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(a.getBalance("zhangsan")); //执行结果 : 100.00
}
}
String name;
double balance; //余额
public synchronized void set(String name,double balance){ //set 方法写入余额
this.name = name;
try {
Thread.sleep(2000); //中断这个线程扩大问题,不然执行时间短看不出效果
} catch (InterruptedException e) {
e.printStackTrace();
}
this.balance = balance;
}
public /*synchronized*/ double getBalance(String name){ //读取余额 不加锁会产生脏读,解决方法就是读时也加锁!
return this.balance;
}
public static void main(String[] args) {
Account a = new Account();
new Thread(()->a.set("zhansan",100.00)).start(); //执行线程,"()->a.set("zhansan",100.00)",java1.8才支持,开辟一个新线程执行a的set方法.
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(a.getBalance("zhangsan")); //第一次读取时还未写入~读取到默认值. 执行结果 : 0.0
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(a.getBalance("zhangsan")); //执行结果 : 100.00
}
}
相关文章推荐
- java例程练习(多线程的两种创建方式)
- java 多线程 方法详解
- Java多线程系列--“JUC线程池”01之 线程池架构
- java多线程原理-I
- java例程练习(多线程[join()方法])
- Java多线程学习
- Java 多线程 —— synchronized关键字
- java多线程
- java多线程总结
- Java多线程,哲学家就餐问题
- JAVA多线程-对象及变量的并发访问(二)volatile关键字
- java多线程面试题
- Java基础-多线程-生产者与消费者(笔记)
- Java学习笔记05 多线程
- java 多线程循环输出ABC
- java(多线程)
- Java 多线程 (PART V) yield()方法
- 从JAVA多线程理解到集群分布式和网络设计的浅析
- java例程练习(多线程[线程同步问题])
- Java多线程与并发学习之(四):线程常用方法