gpt4 book ai didi

java - java中的静态和非静态方法之间共享的资源

转载 作者:行者123 更新时间:2023-12-03 23:02:04 27 4
gpt4 key购买 nike

我知道 static synchronized 方法锁定在 class 对象上,而实例 synchronized 方法锁定在当前实例上对象的,即 this

由于这两个对象不同,它们有不同的锁,所以当一个线程正在执行 static synchronized 方法时,java 中的其他线程不需要等待线程返回而不是它将获得单独的锁。

考虑下面的例子

public class Test {
static int count = 0;

public synchronized void f1(){
count++;
}

public static synchronized void f2(){
count++;
}
}

这里的共享计数不是以互斥方式访问的,这可能会导致将不正确的 count 传递给 f1() 的调用者,而另一个线程正在递增 count 使用 static f2() 方法。

这种情况有什么解决办法?我问的是正确的问题吗,如果不是请让我更正?如果这是真实情况,那么 java pro ovoids 有什么解决方案?

最佳答案

您可以在非静态方法上使用同步块(synchronized block),它应该使用与静态同步方法相同的监视器:

public void f1() {
synchronized(Test.class) {
count++;
}
}

关于java - java中的静态和非静态方法之间共享的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20367121/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com