AWS lambda 和 Java 并发
众所周知,AWS lambda 可能会重用处理程序的早期创建对象,并且它确实做到了(请参阅常见问题解答):
问:AWS Lambda 是否会重用函数实例?
为了提高性能,AWS Lambda 可能会选择保留函数的实例并重复使用它来为后续请求提供服务,而不是创建新副本。您的代码不应假定这种情况总是会发生。
问题与并发性有关。如果我有一个处理程序的类,比如说:Java
public class MyHandler {
private Foo foo;
public void handler(Map<String,String> request, Context context) {
...
}
}
那么,在这里访问和使用对象变量是否是线程安全的?foo
换句话说:AWS lambda 是否可以将同一对象并发用于不同的调用?
编辑我的函数在基于事件的源上进行处理,特别是由 API Gateway 方法调用。
编辑-2当您想要实现与外部资源的某种连接池时,会出现这样的问题,因此我想将与外部资源的连接保持为对象变量。它实际上可以按预期工作,但我害怕并发问题。
编辑-3更具体地说,我想知道:AWS lambda的处理程序实例是否可以共享公共堆(内存)?我必须指定这个额外的细节,以防止通过列出有关java线程安全对象的明显和众所周知的事情来回答。