You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda调用期间是否保留字段值?Java实例复用疑问

问题解答

原代码场景分析

给定Java Lambda处理类(注:原代码返回值类型int需改为Integer,因RequestHandler泛型参数要求为引用类型):

public class HandlerClass implements RequestHandler<DynamodbEvent, Integer> {

    int i = 0;

    public HandlerClass() {}

    public Integer handleRequest(DynamodbEvent dynamodbEvent, Context context) {
        i = i + 1;
        System.out.println(i);
        return i;
    }
}

事件B触发时的行为(非static变量i)

事件B会复用同一个HandlerClass实例,打印2。

Lambda的执行机制是:首次请求(事件A)触发时,会创建执行容器并初始化HandlerClass实例;若容器在请求处理完成后未超时销毁,后续请求(事件B)会直接复用该容器,同时复用已创建的HandlerClass实例。因此成员变量i会保留事件A处理后的取值(1),执行i = i + 1后变为2,最终打印2。

当i定义为static时的行为

如果将i改为static int i = 0;,事件B触发时依然会打印2。

static变量属于类级别,所有该类的实例共享同一值。事件A处理后static变量i变为1,事件B触发时,无论复用原有实例还是创建新实例(超时前复用实例的概率更高),static变量都会基于之前的取值累加为2,最终打印2。

内容的提问来源于stack exchange,提问作者Milo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:22:07