一、线程安全问题
多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题。
1、取钱模型演示
需求:小明和小红是一对夫妻,他们有一个共同的账户,余额是10万元。
如果小明和小红同时来取钱,而且2人都要取钱10万元,可能出现什么问题呢?
2、取钱业务
需求:
小明和小红是一对夫妻,他们有一个共同的账户,余额是10万元,模拟2人同时去取钱10万。
分析:
①:需要提供一个账户类,创建一个账户对象代表2个人的共享账户。
②:需要定义一个线程类,线程类可以处理账户对象。
③:创建2个线程对象,传入同一个账户对象。
④:启动2个线程,去同一个账户对象中取钱10万。
3、案例代码:
账户类
package ThreadTest;
public class Account {
private String cardCode;
private double money;
// private Object lock = new Object();
public synchronized void takeMoney(double money){
// synchronized (lock) {
// synchronized (this) {
System.out.println(Thread.currentThread().getName()+"准备来取钱");
if (this.money >= money) {
System.out.println(Thread.currentThread()