【发布时间】:2023-03-25 07:39:01
【问题描述】:
我想了解如何对 Java 中的静态方法进行锁定。
假设我有以下课程:
class Foo {
private static int bar = 0;
public static synchronized void inc() { bar++; }
public synchronized int get() { return bar; }
据我了解,当我调用f.get() 时,线程获取对象f 的锁,而当我调用Foo.inc() 时,线程获取类Foo 的锁。
我的问题是这两个调用如何相互同步? 调用静态方法是否也会获得所有实例化的锁,还是反过来(这似乎更合理)?
编辑:
我的问题不完全是static synchronized 的工作原理,而是静态和非静态方法如何相互同步。
即,我不希望两个线程同时调用f.get() 和Foo.inc(),但是这些方法获取不同的锁。我的问题是这是如何预防的,在上面的代码中是否可以预防。
【问题讨论】:
标签: java multithreading synchronized