银行转账问题探究-java中synchronized关键字用法.

本文通过一个具体的转账场景探讨了多线程环境下如何确保数据的一致性和线程安全性。介绍了使用Java synchronized关键字、数据库乐观锁等方法来解决多线程并发修改同一账户余额的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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失败,否则成功。



理解不对的地方敬请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值