1、问题描述.两个线程Thread1, Thread2, 一个账户B 初始余额1000;先Thread1想给账户B加100,Thread2想给账户B加200,如何实现.
(1) 1、读余额1000 加 100 写1100 这样如果两个线程并发就会出现 Thread1 读 1000 Thread2 读1000 Thread1 写 1100 Thread2 写1200 最终1200 而不是1300的错误.
(2) 使用java的sycnchronized方法这样转账的方法多个线程只能队列式执行,而且要保证转账方法所在类是单例的。
(3)转账方法中sycnchronized(类成员)不需要单例但多线程仍需等待
(4)update table set 余额 = 余额 + 100 where user=B;
(5) 读余额1000 + 100 = 1100 update table set 余额 = 1100 where user=B and 余额 = 1000;获取更新条数<=0失败,否则成功。
理解不对的地方敬请指正。