关于线程安全,请教各位。

2019-09-18 20:42:12 +08:00
 orbwalker

关于线程安全:
-------------------------------


//例 1:锁加在共享资源操作之前
synchronized(xxx.class){
money--;
}
-------------------------------

//例 2:锁加在判断之前
synchronized(xxx.class){
if(money > 0){
money--;
}
}
-------------------------------
问:例 1 可能导致另一个线程进入判断中,
但也可以保证不能同时操作共享资源吧?

3274 次点击
所在节点    Java
6 条回复
hspeed18
2019-09-18 20:55:45 +08:00
是的,然而并没有什么用,判断和修改应该是原子操作
tachikomachann
2019-09-18 20:58:49 +08:00
例 1 可能出现 money 小于等于 0 的情况
leonme
2019-09-19 08:48:42 +08:00
感觉问题没表达清楚
sagaxu
2019-09-19 09:06:29 +08:00
这两段代码,一个有判断,一个没判断,逻辑都不同,有可比性?
SoloCompany
2019-09-20 13:56:04 +08:00
我猜,你想问的应该是 dcl
magiclz233
2019-09-24 22:54:46 +08:00
你想说的应该是例 1 的判断再加锁之外,判断这个操作是没有加锁的,会出现问题,但是进去之后加锁了,money--是不会出现问题的,如果锁中只有--操作,也可以 volatile 或者 atom 一些类,不需要加锁。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/601938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX