案例:
小明和小红是一对夫妻,他们有一个共同的账户,账户里有10万元
他们同时来取钱,并且他们都取了10万元,这个时候会发生什么呢?
//多个线程同时访问同一个共享资源而且修改了该资源,便会产生线程安全问题
public class 多线程_3线程安全案例 {
public static void main(String[] args) {
//定义线程类,创建一个共享的账户对象
account a=new account("abc",10000);
//创建两个取钱的线程对象
new drawthread(a,"小明").start();
new drawthread(a,"小红").start();
}
}
//取钱的线程类
class drawthread extends Thread{
//接收处理的账户对象
private account acc;
public drawthread(account acc,String name){
super(name);
this.acc=acc;
}
public void run(){
//取钱
acc.drawmoney(10000);
}
}
class account{
private String cartId;
private double money;//账户余额
public account() {
}
public account(String cartId, double money) {
this.cartId = cartId;
this.money = money;
}
public String getCartId() {
return cartId;
}
public void setCartId(String cartId) {
this.cartId = cartId;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public void drawmoney(double money) {
//先获取是谁来取钱,线程名即是人名
String name=Thread.currentThread().getName();
//判断账户是否够钱
if(this.money>=money){
//取钱
System.out.println(name+"来取钱成功,取了:"+money);
//更新金额
this.money-=money;
System.out.println(name+"取钱后剩余:"+this.money);
}else{
//余额不足
System.out.println(name+"来取钱,但余额不足!");
}
}
}
答案是:银行亏了10万元,而小明和小红白嫖了10万元
看到这很多人不免有个大胆的想法
别急,这种低级错误银行当然不会犯,下期将为大家揭晓解决方案
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)