1. 转账死锁场景
场景:简单的银行转账,将资金从一个账户(fromAccount)转到另一个账户(toAccount),当并发执行的时候,可能会出现死锁的情况;
死锁的场景:多线程执行,线程1:账户A转账给账户B;线程2:账户B转账给账户A;线程1和线程2同时转账时,就可能会发生 死锁:
线程1:new TransferAccount(fromAccount,toAccount,1)
线程2:new TransferAccount(toAccount,fromAccount,2)
如果执行顺序不恰当,那么线程1可能获得fromAccount的锁,并且等待toAccount的锁;然而此时线程2拥有toAccount的锁,并正在等待fromAccount的锁。
死锁是指一组互相竞争资源的线程因互相等待,导致永久阻塞的现象
/*
* 需求:简单的银行转账,它将资金从一个账户转到另一个账户
* 在开始转账之前,需要获得两个Account的锁,以确保以原子的方式更新账户中的余额,且不能破坏不可变的条件,如账户的余额不能为负数
*
*/
/*账户类*/
class Account{
private String accountName;//账号
private int balance;//资金总额
public Account(String accountName,int balance){
this.accountName = accoun