存在的问题:
package com.ou.p3;//不安全的线程
//两个人去银行取钱,账户public class UnSafeBank {public static void main(String[] args) {Account account = new Account(100,"结婚基金");Drawing boy = new Drawing(account,50,"boy");Drawing girl = new Drawing(account,100,"gril");boy.start();girl.start();}
}class Account{int money;String name;public Account(int money, String name) {this.money = money;//余额this.name = name;//账户名称}
}//银行:模拟取款
class Drawing extends Thread{Account account;//账号名称//取了多少钱int drawingMoney;//手里有多少钱int nowMoney;public Drawing(Account account,int drawingMoney,String name){super(name);this.account = account;this.drawingMoney = drawingMoney;}@Overridepublic void run() {if(account.money - drawingMoney < 0){System.out.println(Thread.currentThread().getName()+"钱不够,取不了");return;}//卡内余额=卡内余额-取走的钱account.money = account.money-drawingMoney;//你手里的钱nowMoney = drawingMoney;System.out.println(account.name+"余额为:"+account.money);System.out.println(this.getName()+"手里的钱"+nowMoney);}
}
package com.ou.p3;//不安全的线程
//两个人去银行取钱,账户public class UnSafeBank {public static void main(String[] args) {Account account = new Account(1000,"结婚基金");Drawing boy = new Drawing(account,50,"boy");Drawing girl = new Drawing(account,100,"gril");boy.start();girl.start();}
}class Account{int money;String name;public Account(int money, String name) {this.money = money;//余额this.name = name;//账户名称}
}//银行:模拟取款
class Drawing extends Thread{Account account;//账号名称//取了多少钱int drawingMoney;//手里有多少钱int nowMoney;public Drawing(Account account,int drawingMoney,String name){super(name);this.account = account;this.drawingMoney = drawingMoney;}//synchronized 默认锁的是this@Overridepublic void run() {//锁的对象就是变化的量 需要增删改的对象synchronized (account){if(account.money - drawingMoney < 0){System.out.println(Thread.currentThread().getName()+"钱不够,取不了");return;}//卡内余额=卡内余额-取走的钱account.money = account.money-drawingMoney;//你手里的钱nowMoney = drawingMoney;System.out.println(account.name+"余额为:"+account.money);System.out.println(this.getName()+"手里的钱"+nowMoney);}}
}
package com.ou.p3;import java.util.concurrent.CopyOnWriteArrayList;//测试JUC安全类型的集合
public class TestJUC {public static void main(String[] args) throws InterruptedException {CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList<>();for (int i = 0; i < 10000; i++) {new Thread(()->{copyOnWriteArrayList.add(Thread.currentThread().getName());}).start();}Thread.sleep(3000);System.out.println(copyOnWriteArrayList.size());}
}