Для последней части: Используйте блоки синхронизации на параллельном объекте, фиктивном объекте или объекте класса. Помните о каскадных блоках синхронизации. Они могут привести к мертвым замкам, когда приобретены в другом порядке.

я есть веб-приложение, работающее на Tomcat.

Есть несколько расчетов, которые необходимо выполнить в нескольких местах веб-приложения. Могу ли я сделать эти вычисления статическими вспомогательными функциями? Если на сервере достаточно процессорных ядер, могут ли несколько вызовов этой статической функции (в результате нескольких запросов к различным сервлетам) выполняться параллельно? Или один запрос должен ждать, пока другой запрос не завершит вызов?

public class Helper {
    public static void doSomething(int arg1, int arg2) {
        // do something with the args
        return val;
    }
}

если вызовы выполняются параллельно: у меня есть другой вспомогательный класс со статическими функциями, но этот класс содержит закрытый статический член, который используется в статических функциях. Как я могу убедиться, что функции поточнобезопасны?

public class Helper {

    private static SomeObject obj;

    public static void changeMember() {
        Helper.obj.changeValue();
    }

    public static String readMember() {
        Helper.obj.readValue();
    }

}

changeValue() а такжеreadValue() читать / изменять одну и ту же переменную-членHelper.obj, Должен ли я сделать все статические функции синхронизированными, или просто блок, гдеHelper.obj используется? Если я должен использовать блок, какой объект я должен использовать, чтобы заблокировать его?

Ответы на вопрос(7)

Ваш ответ на вопрос