I want to understand how locking is done on static methods in Java.
let's say I have the following class:
class Foo {
private static int bar = 0;
public static synchronized void inc() { bar++; }
public synchronized int get() { return bar; }
It's my understanding that when I call f.get()
, the thread acquires the lock on the object f
and when I do Foo.inc()
the thread acquires the lock on the class Foo
.
My question is how are the two calls synchronized in respect to each other?
Is calling a static method also acquires a lock on all instantiations, or the other way around (which seems more reasonable)?
EDIT:
My question isn't exactly how static synchronized
works, but how does static and non-static methods are synchronized with each other.
i.e., I don't want two threads to simultaneously call both f.get()
and Foo.inc()
, but these methods acquire different locks. My question is how is this preventable and is it prevented in the above code.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…