2 qq 19430115 qq_19430115 于 2016.03.05 15:34 提问

java 多用户线程同步锁 10C

SSM 框架做一个用户取钱的业务,为了防止一个用多端同时取钱, 可以再业务方法前加上synchronized 是方法变成同步方法,每一个请求经过这个业务方法是只能同步等待,
但是如果有很多个用户同时取钱呢(,本来不同的用户取钱时不会相互影响的,) 如果这样做就会降低程序的执行效率, 请问谁知道怎么做?

7个回答

u013596119
u013596119   Rxr 2016.03.05 15:39

线程锁的时间可以忽略不计吧?有确切测试证明会影响用户使用吗?

u013596119
u013596119 回复qq_19430115: 就像比小宝说的,这个锁只是针对对象的,除非你有一万个用户同时访问自己的账户对象,否则你说的百万级别用户都是各自访问各自的账户对象,也不存在锁的问题了
接近 2 年之前 回复
u013596119
u013596119 哪里理解错了?熊浪的解释是对的,如果你的对象需要多个用户同时访问,即使不用synchronized也要加lock,如果出现了卡的情况,那就集群分布式计算吧,但是一般情况是没有百万级用户同时访问一个对象的吧,像你说的,一个用户多端取钱,最多也不会有用户同时用一万个终端对他的账户进行访问
接近 2 年之前 回复
qq_19430115
qq_19430115 回复DarthHaric: 你理解错了, 看 毕小宝的回复
接近 2 年之前 回复
u013596119
u013596119 同一时刻有一万个人对同一个同一个对象发出请求????也就是同一个时刻一万个人同时访问一个账户同时取钱。。。??
接近 2 年之前 回复
qq_19430115
qq_19430115 当用户量达到百万时,同一时刻达到一万访问这个方法如果还是同步锁的话 那就有意思了
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.05 15:46

首先,Java web请求处理是多线程的,即每个请求都是由一个线程来处理的,多用户同时访问同一个请求时,也是在各自线程中的,如果线程同步使用的锁用synchronized同步非静态方法的话,那么锁监视器就是当前对象this。
你说的多个用户同时取钱,各自用自己的锁对象的话,应该不能相互影响的吧。

qq_20039385
qq_20039385 回复qq_19430115: 如果要保持多个终端同时在线的话,建议每次回话带上口令(token),token一样的视为同一用户,就用同一把锁。
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you 回复qq_19430115: 那建议你看一下大型网站构建框架的书籍吧,这些涉及到分布式处理问题。像淘宝这种大网站构建过程。
接近 2 年之前 回复
qq_19430115
qq_19430115 回复毕小宝:这种情况是假设的, 就是同一个用户在同一时刻发出了多条请求修改余额的请求
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you 回复qq_19430115: 这个多地登录情况根本就不应该存在啊,应该作强迫下线处理。就像支付宝不允许同一个用户不同终端同时登录时,会强迫另一个终端下线的。
接近 2 年之前 回复
qq_19430115
qq_19430115 如果用户userno 在A,B两个浏览器上同时发请求,那么怎么保证他们用的是同一个对象锁呢?
接近 2 年之前 回复
qq_19430115
qq_19430115   2016.03.05 15:46

当用户量达到百万时,同一时刻达到一万访问这个方法如果还是同步锁的话 那就有意思了

xionglangs
xionglangs   Rxr 2016.03.05 16:03

当用户量达到百万时,同一时刻访问达到一万,加同步锁有卡的要死的情况,还不做集群吗。

qq_19430115
qq_19430115 我只是给他举例子,这里和集群没关系, 一般账户系统应该保证 同一个用户多个请求不能同时修改用户余额
接近 2 年之前 回复
qq_20039385
qq_20039385   2016.03.05 22:46

毕小宝 正解,顶一下

qq_16414307
qq_16414307   2016.03.06 16:00

你这个不应该在java中锁,而应该在数据库中.

数据库会帮你解决数据一致问题,只要合理使用了事务.

begin work
减余额
读余额
余额未负,rollback
返回取钱后的新余额
commit work

如果在java中,你能保证只有一台应用服务器吗?
多台的话,你还要加分布式锁!

broust
broust   2016.03.07 11:45

db锁账户记录吧。
否则集群操作无解了 ....

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!