gpt4 book ai didi

java - 静态同步方法提供了类级别的锁定。类级别锁定是什么意思?

转载 作者:行者123 更新时间:2023-12-03 13:19:52 25 4
gpt4 key购买 nike

这是否意味着任何线程,无论其获取的对象如何,都不会干扰在同步静态方法中执行的其他线程。即使我们使用class_name.static_Method进行调用。

Ex- If we have two thread :

public class Test implements Runnable {

public synchronized static testMethod(){}

public void run(){ testMethod(); }

public static void main(String[] args) {
Test obj1=new Test();
Test obj2=new Test();
Thread t1=new Thread(obj1);
Thread t2=new Thread(obj2);
t1.start(); // thread on object obj1
t2.start(); // Thread on object obj2
Test.testMethod(); // main thread
}
}

如果线程t1进入静态方法,则t2和主线程即使它们具有不同的对象也不会进入该方法。
纠正我,如果我错了。

最佳答案

如果线程t1进入静态方法,则t2和主线程即使它们具有不同的对象也不会进入该方法

它是static方法,这是该类的所有实例(对象)的类级别(通用)方法,因此对象无关紧要。如果将其声明为synchronized,则将执行该方法的线程将获取对类对象(Class<Test>对象)的锁定。

可以将static synchronized方法想像如下

public static testMethod(){
synchronized(Test.class) {
//method body
}
}

由于一次加载一个类(除非您定义自定义的类加载器并重新加载该类),所以将只有一个类对象,该对象充当互斥锁

关于java - 静态同步方法提供了类级别的锁定。类级别锁定是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642642/

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