Для последней части: Используйте блоки синхронизации на параллельном объекте, фиктивном объекте или объекте класса. Помните о каскадных блоках синхронизации. Они могут привести к мертвым замкам, когда приобретены в другом порядке.
я есть веб-приложение, работающее на 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
используется? Если я должен использовать блок, какой объект я должен использовать, чтобы заблокировать его?