- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习java并发,并使用一个在多人之间共享的银行帐户示例来尝试练习并发原理。
这是我的帐户类(class)。
public class Account(){
private int balance = 0;
public int getBalance(){ return balance}
public synchronized void deposit(int val){//..}
void synchronized void withdrawal(int val){//..}
}
存款和取款方法是同步的,因为它们直接修改 Account 对象的状态,因此如果多个用户尝试同时更改它,可以避免数据损坏。
另一方面,getBalance()
不会更改 Account 对象的状态。但我在想,如果在存款或取款时调用 getBalance()
,它将返回一个过时的值。同步或不同步 getBalance()
的标准做法是什么?
最佳答案
if getBalance() is called while a deposit or withdrawal is happening, it will return the outdated value
这些进程运行时没有过时的值,只是因为您无法确定它们是否会失败(我假设您没有使用 balance
字段来中间状态表示)。
所以问题实际上是 - 您是否想要读取最新的余额状态,并且无论提款或存款是否正在进行?或者,您想等到其中一个进程完成,以便读取该值?
在第一种情况下,您可以简单地将字段设置为 volatile (private volatile int Balance = 0;
),以确保线程之间的内存可见性。
在第二种情况下,只需使用synchronized
即可。
关于Java并发: Do I have to synchronise a method that only retrieve state and does not modify it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59453157/
我读到,对 Collection 实例的访问不应在类内同步。原因似乎是另一个对象可能会操纵列表,而不同步到第一个对象。然而,我想要同步的List是一个私有(private)字段,由所有者对象创建,并且
我需要决定多线程应用程序之一需要使用多少个计数信号量。我开始知道,如果我们知道同步点,那么我们就可以决定要使用的信号量的数量。什么是同步点? 最佳答案 同步点是执行流中一个线程必须等待其他繁忙线程的位
void Java_Package_Multithreading_againCallReadFile (JNIEnv *env, jobject obj) { if((*env)->Monito
对于我的一个家庭项目,我决定使用 docker 容器和 fig 进行编排(第一次使用这些工具)。 这是我的 fig.yaml: rabbitmq: image: dockerfile/rabbit
user32.dll 的文档 SetParent函数指出 When you change the parent of a window, you should synchronize the UIST
我是 PC 游戏的速通玩家(喜欢以尽可能快的方式完成游戏的人),我想在玩游戏时记录我的输入,以便稍后自动重播。所以我创建了一个小 C# 程序来做到这一点:基本上,它会启动一个计时器,每次我按下/松开一
我正在学习java并发,并使用一个在多人之间共享的银行帐户示例来尝试练习并发原理。 这是我的帐户类(class)。 public class Account(){ private int ba
我已经读过一些关于此问题的文章,但它们看起来很旧(2008 年),我希望有人可能有一个更优雅的解决方案。 我想知道 Expression Engine 开发人员如何使用本地测试和实时环境工作流程。 我
我是 Java 的新手,正在尝试学习同步语句的概念。下面的代码和语句来自 Java tutorial Oracle . 我的问题是,“nameList”变量是实例变量还是类变量?为什么它不包含在 sy
我在将 openWithCompletionHandler: (UIManagedDocument) 与主要事件同步时遇到一个基本问题。 情况:我有一个管理共享 UIManagedDocument 的
在 Grails 应用程序中,我们有一个接口(interface),它接受从单个请求中的参数创建的类似路径的 3 级结构,例如 level1/level2/document 对象 level2引用资料
我是一名优秀的程序员,十分优秀!