我想了解如何在Java中对静态方法进行锁定.
假设我有以下课程:
class Foo {
private static int bar = 0;
public static synchronized void inc() { bar++; }
public synchronized int get() { return bar; }
Run Code Online (Sandbox Code Playgroud)
我的理解是,当我调用时f.get(),线程获取对象的锁定f,当我执行时Foo.inc(),线程获取类的锁定Foo.
我的问题是两个呼叫如何相互同步?调用静态方法也会获取所有实例化的锁定,或者相反(这似乎更合理)?
编辑:
我的问题并不完全是如何static synchronized工作的,但静态和非静态方法是如何相互同步的.也就是说,我不希望两个线程同时调用这两个f.get()和Foo.inc(),但这些方法获得不同的锁.我的问题是这是如何可以预防的,并且在上面的代码中是否被阻止了.