取钱 线程同步问题
同步方法我知道,但是如何知道 甲乙2个人用的是同一账户呢,输入帐号密码后从数据库查出帐号,难道要比对信息?
------解决方案--------------------账号是唯一的。
就像你去取钱,你插上银行卡,银行卡上得卡号是唯一的。
而我们取钱的方式就是多样的,可以通过银行卡,存折等。所以多个用户在不同提款机上访问的是数据库上同一条记录。
------解决方案--------------------
你想问的是不是当他们去查询的时候,synchronized(account)是怎么确定它锁定的是两个想同的用户?
Synchronized之所以能知道是同一个资源,是因为我们都是根据同一个ID去访问数据的。
就像我们去公厕上厕所,我在上的时候你肯定是不能进来上的,对吧?当我上完把茅坑让出来,你才能上,对吧?在这个过程里,茅坑是不会改变的。不会说,你上到一半茅坑换成隔壁的了。因为茅坑已经固定在哪里了。
我们共同访问的资源就像这个茅坑,Synchronized只不过是在茅坑外围加了把锁,谁先拿到锁谁就可以先使用,下一个想使用,不行,得等我用完你才能用,这样就有效了保障了数据的一致性。
这样说能明白么?