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