根据我对Java类的了解
- 非静态同步方法:获取特定对象的锁
- 静态同步方法:类上的锁获取
我对此有点困惑,因为我们可以通过类名或对象名调用静态方法。
请假设有 4 种方法是我的类都是同步的。2 个方法是静态的,2 个是非静态的。如果我将创建我的类“obj1”的 1 个对象,并且还有 2 个线程 Thread1 和 Thread2
问题 1:如果我将尝试使用 obj1(或类名)访问静态同步方法。这是否意味着“obj1”上没有锁定只有 2 个静态方法将被锁定(类级锁定)?意味着其他线程可以同时使用“obj1”访问非静态方法但不能访问静态方法?
问题 2:如果我将尝试访问非静态同步方法,使用 Thread1 中的 obj1。这是否意味着 Thread2 只锁定了 2 个方法?意味着 Thread2 可以访问 2 个静态方法,或者我们也可以同时使用 className(MyClass) 访问静态方法
问题 3:如果我的类中的所有方法都是静态的并且是同步的。这是否意味着将没有对象级别的锁,并且所有线程只有一个类级别的锁。?
请稍微解释一下类级别锁
提前致谢。