通过增加锁的方式解决一人一单问题,
注意userId.toString.intern()来作为锁
如果字符串s在字符串常量池中存在对应字面量,则intern()方法返回该字面量的地址;如果不存在,则创建一个对应的字面量,并返回该字面量的地址
另外注意锁和事务的关系需要按照先锁再事务的执行关系,
如果先释放锁,外面再加事务容易造成锁释放后事务还没有提交,
此时下一个线程同样可以获取到锁再次执行代码,
如果先执行事务再释放锁则不会有此问题
通过增加锁的方式解决一人一单问题,
注意userId.toString.intern()来作为锁
如果字符串s在字符串常量池中存在对应字面量,则intern()方法返回该字面量的地址;如果不存在,则创建一个对应的字面量,并返回该字面量的地址
另外注意锁和事务的关系需要按照先锁再事务的执行关系,
如果先释放锁,外面再加事务容易造成锁释放后事务还没有提交,
此时下一个线程同样可以获取到锁再次执行代码,
如果先执行事务再释放锁则不会有此问题