Java:使用锁时是否所有可变变量都需要可变?

标签 java locking concurrency volatile synchronized

下面的变量 x 是否需要可变?

或者 utils.concurrent 锁中的操作执行与同步块(synchronized block)相同的功能(确保它被写入内存,而不是存储在 cpu 缓存中)?

myMethod(){
  myLock.lock();
  x++;
  myLock.unlock();
}

最佳答案

只有在没有锁的情况下在别处访问这些变量时,这些变量才需要是可变的。例如,作为对大小变量的快速只读访问。 lock 方法确实起到与同步块(synchronized block)相同的作用。请参阅 Lock 的 javadoc 中的“内存同步”部分类。

关于Java:使用锁时是否所有可变变量都需要可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3552956/

相关文章:

c# - TDD 由内而外 : Queries of how to do it correctly?

Java 新 GUI 问题

java - 从 Java 中的字符串中提取浮点值

c - 使用全局变量同步 p_threads

Java 相当于.Net 的AutoResetEvent?

java - 替换所有重复字符

sql-server - 在 SQL Server 中强制查询超时

multithreading - LOCK 前缀与 MESI 协议(protocol)?

Javascript 函数在运行时再次被调用

java - 当 run() 和 start() 实际上都产生一个新线程时,在新线程上调用 run() 和 start() 究竟有什么区别?