文章目录
说明:之前代码在 03线程安全问题 的文章中
一、线程同步的核心思想
- 加锁,把共享资源进行上锁,每次只能一个线程进入访问完毕以后解锁,然后其他线程才能进来
二、线程同步实现
1、同步代码块
- 作用:把出现线程安全问题的核心代码给上锁
- 原理:每次只能一个线程进入,执行完毕之后自动解锁,其他线程才可以进来执行
格式
synchronized(同步对象锁){
操作资源共享的代码(核心代码)
}
锁对象要求
- 理论上:锁对象只要对于当前同时执行的线程来说是同一对象即可
1.1 代码实现
说明:所有代码都一样,只有Account类里边的drawMoney方法里边的核心代码部分加了synchronized 关键字
public void drawMoney(double money) {
// 1、先获取是谁来取钱,线程的名字是任命
String name = Thread.currentThread().getName();
// 2、判断账户是否购钱
synchronized ("此时的锁对象是任意的") {
if (this.money>=money){
// 3、取钱
System.out.println(name+"来取钱成功,吐出:"+money);
// 4、更新余额
this.money-=money;
System.out.println(name+"取钱后剩余:"+this.money);
}else {
// 余额不足
System.out.println(name+"来取钱,余额不足!");
}
}
}
运行结果
1.2 锁对象规范
问题:上