У меня есть такой класс:
public class Utils {
public static void doSomething() {
// doSomething code
}
public static void doSomethingElse() {
// doSomethingElse code
}
}
Я хочу, чтобы эти два метода были синхронизированы, но не синхронизированы друг с другом, т.е. никакие два потока не могут обрабатывать метод 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
}
}
Я вижу, что ответ Скотта Стэнчфилда использует похожий подход:
Как работают синхронизированные статические методы в Java?
но это лучший способ сделать это? Мне кажется немного неуклюжим создание двух объектов только для блокировки - есть ли лучший способ сделать это?