开发者

Java volatile modifier and synchronized blocks

开发者 https://www.devze.com 2023-01-06 03:31 出处:网络
Does a variable that is accessed by multiple threads, but only inside synchronized blocks, need the volatile modifier? If开发者_如何学Python not, why?You do not need to use volatile inside of synchron

Does a variable that is accessed by multiple threads, but only inside synchronized blocks, need the volatile modifier? If开发者_如何学Python not, why?


You do not need to use volatile inside of synchronized, synchronized already guarantees the correct behavior for local caching of variables when used consistently (on every access).

volatile works on primitive values, and can be a nice shortcut for atomic accesses to a primitive type. Note that the behavior of volatile has changed in JDK 5 from 1.4.

More information can be found here


No. When you work within a synchronized block, all cached variables are synchronized on access, since it creates a memory barrier.

For details, see this comparison (with discussion) of volatile to synchronized.


Blocks that synchronize on the same object (or method) are guaranteed to not be run at the same time. So as long as you synchronize to the same object, your variable will never have concurrent accesses, so it doesn't need special treatment.

If your accesses aren't synchronized, then you have a race condition. Making the variable volatile can be correct for some primitive variables (I defer to other posts for better info on volaitle). If that isn't useful, you almost certainly have a bug.

0

精彩评论

暂无评论...
验证码 换一张
取 消