gpt4 book ai didi

java - 类级和对象级锁同步

转载 作者:行者123 更新时间:2023-12-01 18:34:45 25 4
gpt4 key购买 nike

class MyClass
{
public synchronized void print() {}

public static synchronized void buffer() {}
}

使静态对象同步会生成一个 CLASS 级别对象,其中只有一个线程可以访问它。该类具有静态和非静态 Synchronized 方法。

  1. 当另一个线程(线程A)使用静态同步时,其他线程(线程B)是否可以通过对象锁访问非静态同步方法() (获取类级别锁)方法?

  2. 我希望在(Thread-B)释放锁之前没有线程访问任何静态同步方法。

最佳答案

您的两个问题的答案都是"is":静态级锁不会阻止实例级同步方法,并且它们适用于所有静态同步方法。

不过,一般来说,不鼓励在类上进行同步,因为这会使您的类面临无限等待攻击。肇事者在类上进行同步,从而阻止所有静态同步方法运行。更好的方法是创建一个用于锁定的私有(private)对象,并对其进行同步,如下所示:

class MyClass
{
public synchronized void print() {}

private static Object staticLock = new Object();
public static void buffer() {
synchronized(staticLock) {
...
}
}
}

同步实例方法也是如此:如果要在潜在的非合作环境中使用该类,最好使用私有(private)对象进行锁定。

关于java - 类级和对象级锁同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521377/

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