解决第15小节中不安全线程的方法
不安全买票案例
// synchronized 同步方法,锁的是this
private synchronized void buy(){
// 判断是否有票
if (ticketNum<=0){
flag = false;
return;
}
// 买票
System.out.println(Thread.currentThread().getName()+"买到了第"+ticketNum--+"票");
}
不安全银行取钱案例
public void run() {
// 锁:哪个类的的属性会发生变化(增删改查),就锁哪个类的对象
synchronized (account){
// 判断有没有钱
if (account.money-drawingMoney<0){
System.out.println(Thread.currentThread().getName()+"卡里余额不足,不能取款");
return;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 卡内余额
account.money = account.money - drawingMoney;
// 手里的钱
nowMoney = nowMoney +drawingMoney;
System.out.println(account.name+"卡内余额:"+account.money);
// this.name = Thread.currentThread().getName()
System.out.println(this.getName()+"手里的钱:"+nowMoney);
}
}
线程不安全集合
new Thread(()->{
// 锁住(同步块)
synchronized (list){
list.add(Thread.currentThread().getName());
}
}).start();