作者回复: 还真是这样啊!
作者回复: 你考虑的很周到!👍
加超时在实际项目中非常重要!
作者回复: 你发现了个大bug!感谢感谢!!!我这就修改一下啊
作者回复: 这个方案最简单
作者回复: 实际开发中都是用数据库事务+乐观锁的方式解决的。这个就是个例子,为了说明死锁是怎么回事,以及死锁问题怎么解决。
作者回复: 可以用top命令查看Java线程的cpu利用率,用jstack来dump线程。开发环境可以用 java visualvm查看线程执行情况
作者回复: 你说到我心里了😃😃😃
作者回复: 这一部分的最后一章,要不就给答案吧
作者回复: 循环等待,一定是A->B->C->...->N->A形成环状。
如果按需申请,是不允许N->A出现的,只能N->P。没有环状,也就不会死锁了。
作者回复: 是的,就是id的次序。
作者回复: 自旋锁在JVM里是一种特殊的锁机制,自诩不会阻塞线程的。咱们这个其实还是会阻塞线程的。不过原理都一样,你这样理解也没问题。
作者回复: 能起作用,这俩操作不会死锁
作者回复: 保护的是对象里面的成员,这俩对象变也只能是里面成员变,相对于里面的成员来说,这俩对象是永远不会变的。你可以这样理解。不是绝对不能用于可变对象,只是一条最佳实践。
作者回复: 👍
作者回复: 为了保险而已,单纯这个例子是不需要的,如果还有取款操作就需要了
作者回复: 是啊,所以知识只是知识,不是能力
作者回复: 实际工作中也有这么做的,只不过是把转入操作放到mq里面,mq消费失败会重试,所以能保证最终一致性。
作者回复: 有区别,如果转账操作很耗时,那么a-b,c-d能并行还是有价值的
作者回复: 是串行,但是允许A转B,C转D