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

2019 年 9 月 18 日
 orbwalker

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


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

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

3830 次点击
所在节点    Java
6 条回复
hspeed18
2019 年 9 月 18 日
是的,然而并没有什么用,判断和修改应该是原子操作
tachikomachann
2019 年 9 月 18 日
例 1 可能出现 money 小于等于 0 的情况
leon0318
2019 年 9 月 19 日
感觉问题没表达清楚
sagaxu
2019 年 9 月 19 日
这两段代码,一个有判断,一个没判断,逻辑都不同,有可比性?
SoloCompany
2019 年 9 月 20 日
我猜,你想问的应该是 dcl
magiclz233
2019 年 9 月 24 日
你想说的应该是例 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