gpt4 book ai didi

java - 访问同步块(synchronized block)中的静态变量

转载 作者:行者123 更新时间:2023-12-01 18:49:31 27 4
gpt4 key购买 nike

(Java同步问题)如我的标题,我可以访问同步块(synchronized block)中的静态变量吗?会造成不一致吗?谁能告诉我访问静态变量同步块(synchronized block)的缺点或优点的详细信息。

最佳答案

我可以访问同步块(synchronized block)中的静态变量吗?

是的,你可以。

会导致不一致吗?

静态意味着在 JVM 中该类的所有实例之间共享。共享资源不是线程安全的。因此静态变量不是线程安全的。因此,如果多个线程尝试访问静态变量,可能会导致不一致。

我所知道的同步静态变量访问的方法。

  1. 在静态对象上同步。

       public class SomeClass{
    private static int sum = 0;
    private static final Object locker = new Object();

    public void increaseSum() {
    synchronized (locker) {
    sum++;
    }
    }
    }
  2. 同步静态方法。

    public class SomeClass {
    private static int sum = 0;

    public static synchronized void increaseSum() {
    sum++;
    }
    }
  3. 在类对象上同步

     public class SomeClass {
    private static int sum= 0;

    public void increaseSum() {
    synchronized (SomeClass .class) {
    sum++;
    }
    }
    }

关于java - 访问同步块(synchronized block)中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16263888/

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