Известно, что AWS lambda может повторно использовать ранее созданные объекты обработчиков, и это действительно так (см. FAQ):
Вопрос: Будет ли AWS Lambda повторно использовать экземпляры функций?
Чтобы повысить производительность, AWS Lambda может сохранить экземпляр вашей функции и повторно использовать его для обслуживания последующего запроса, а не создавать новую копию. Ваш код не должен предполагать, что это всегда будет происходить.
Вопрос касается параллелизма Java
. Если у меня есть класс для обработчика, скажите:
public class MyHandler {
private Foo foo;
public void handler(Map<String,String> request, Context context) {
...
}
}
Итак, будет ли он потокобезопасным для доступа и работы с объектной переменной foo
здесь или нет?
Другими словами: может ли AWS-лямбда одновременно использовать один и тот же объект для разных вызовов?
РЕДАКТИРОВАТЬ Моя функция обрабатывается на основе источника событий, особенно она вызывается методом API-шлюза.
РЕДАКТИРОВАТЬ-2 Такой вопрос возникает, когда вы хотите реализовать какой-то пул соединений с внешними ресурсами, поэтому я хочу сохранить соединение с внешним ресурсом как переменную объекта. Это на самом деле работает как хотелось бы, но я боюсь проблем с параллелизмом.
РЕДАКТИРОВАТЬ-3 Более конкретно мне интересно: могут ли экземпляры обработчиков лямбда-AWS совместно использовать общую кучу (память) или нет? Я должен указать эту дополнительную деталь, чтобы предотвратить ответы с перечислением очевидных и общеизвестных вещей о Java-потокобезопасных объектах.