相关疑难解决方法(0)

字段读取和volatile的同步之间的区别

一篇包含一些并发技巧的文章中,一个示例针对以下几行进行了优化:

double getBalance() {
    Account acct = verify(name, password);
    synchronized(acct) { return acct.balance; }
}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,同步点是确保此线程读取的acct.balance的值是最新的,并且对acct.balance中对象的字段的任何挂起写入也写入主存储器.

这个例子让我想一想:将acct.balance(即Account类的字段余额)声明为不是更有效率volatile吗?它应该更有效,除了你synchronize对acct.balance的所有访问权限,并且不会锁定整个acct对象.我错过了什么吗?

java concurrency synchronization volatile synchronized

10
推荐指数
1
解决办法
1913
查看次数

使用volatile关键字时内存一致性错误的示例?

来自docs:

使用volatile变量可降低内存一致性错误的风险

但这意味着有时候volatile变量不能正常工作?奇怪的是如何使用 - 我认为这是非常糟糕的代码,有时有时不工作.我试过谷歌,但没有找到与volatile有关的示例内存一致性错误.你能提出一个吗?

java memory multithreading consistency volatile

8
推荐指数
1
解决办法
1676
查看次数