看了网络上很多资源对 JVM 的介绍
堆和方法区都是共享的
是不是没有加线程安全的措施(加锁等操作)都是非线程的安全的?
求解……
1
MrFireAwayH 2018-04-26 17:22:21 +08:00 1
[是不是没有加线程安全的措施(加锁等操作)都是非线程的安全的]
因为:没有=非=不=否 所以:没有加线程安全的措施=不加线程安全的措施 结论:没有加线程安全的措施 = 非线程的安全的措施 |
2
lhx2008 2018-04-26 17:31:25 +08:00 via Android
线程安不安全和堆区方法区有什么关系吗
|
3
orangex 2018-04-26 19:01:48 +08:00 1
不是,举个反例,并发的读取(只读不写)也是安全的。
只不过很显然大部分场景中涉及到写,所以需要保证线程安全。 |
4
v3exhost OP @orangex 但是在我们写的代码中,也并不是所有涉及到写请求的都要+lock,这又是为什么,这个不用担心不安全吗?
|
5
momocraft 2018-04-26 22:21:24 +08:00
(自己知道安全--不安全) 和 (實際安全--不安全) 是兩個維度. 學得多的人這兩個維度夾角會很小.
不安全未必就一定出問題 |
6
flyzy2005 2018-04-27 00:42:21 +08:00 via iPhone
CAS 是不是也没加锁?
|
7
shalk 2018-04-27 00:47:03 +08:00 via iPhone
线程安全和 jvm 使用堆 没有直接关系. 是两个层面的事情.
例如 如果两个线程没有共享变量,这个两个线程的行为无论何种顺序都表现出正确的行为.那它们是线程安全的. 也不用加锁啊. 如果两个线程有一个共享的 Integer,进行累加. 出现了竞态条件,当然需要同步操作保证一下才安全. 但这和 jvm 堆似乎没有什么直接关系. |