线程安全:多个线程同时操作同一个共享资源的时候可能会出现的业务问题
出现的原因:存在多线程同时访问共享资源且存在修改该资源
解决:线程同步 思想为:加锁,让多个线程实现先后依次访问贡献资源。
同步代码块
作用:把出现线程安全问题的核心代码进行上锁
原理:每次只能一个线程进入,执行完毕后自动解锁,其他线程才可以执行
锁对象要求:
锁对象只要对当前同时执行的线程来说是同一个对象既可,如果用任意唯一的锁会影响其他无线线程的执行
规范上: 建议使用共享资源作为锁对象
对于实例方法建议使用this作为锁对象
对于静态方法建议使用字节码 (类名.class)对象作为锁对象
synchronized (this) {
// 2、判断余额是否足够
if(this.money >= money){
// 钱够了
System.out.println(name+"来取钱,吐出:" + money);
// 更新余额
this.money -= money;
System.out.println(name+"取钱后,余额剩余:" + this.money);
}else{
// 3、余额不足
System.out.println(name+"来取钱,余额不足!");
}
}
}