在同一个类中同步静态方法

Cod*_*ber 1 java synchronization

我有一个这样的课:

public class Utils {

    public static void doSomething() {
        // doSomething code
    }

    public static void doSomethingElse() {
        // doSomethingElse code
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望两个方法同步但不能彼此同步,即没有两个线程可以同时处理doSomething()方法,没有两个线程可以同时处理doSomethingElse()但是线程可以处理doSomething()方法和另一个方法同时处理doSomethingElse()方法.

我实现了这样的事情:

public class Utils {

    private static final String DO_SOMETHING_LOCK = "DO_SOMETHING_LOCK";
    private static final String DO_SOMETHING_ELSE_LOCK = "DO_SOMETHING_ELSE_LOCK";

    public static void doSomething() {
        synchronized(DO_SOMETHING_LOCK) {
            // doSomething code
        }
    }

    public static void doSomethingElse() {
        synchronized(DO_SOMETHING_ELSE_LOCK) {
        // doSomethingElse code
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到Scott Stanchfield的回应在这里采用了类似的方法:

同步静态方法如何在Java中工作?

但这是最好的方法吗?对我来说似乎有些笨拙,创造了两个对象,只是用于锁定 - 有更好的方法吗?

unb*_*eli 5

使用字符串不是一个好主意,因为相同的字符串可能出现在其他地方,它将是同一个对象,你可以获得依赖关系,而不是它们.做就是了

private static final Object DO_SOMETHING_LOCK = new Object();
Run Code Online (Sandbox Code Playgroud)

其余的都没问题.