我从基于Java的AWS lambda处理程序中启动了一个单独的线程,有时它完成了,有时却没有,为什么?如何确保线程完成?

问题描述 投票:0回答:1

从处理程序中,我启动一个单独的线程来更新Dynamo表,在该表中,我保留每个用户的API调用计数。问题是,在处理程序完成之后,有时数据库会更新,而有时则不会,因此我选择使用相同的初始线程进行数据库更新,而现在数据库总是会更新,因此这意味着另一个线程有时会完成,而有时它会没有。它与lambda完成时冻结处理程序调用的方式有关吗?在冻结处理程序容器之前,如何确保单独的线程完成?我正在使用旧的Java Runnable接口和Thread类。

java multithreading concurrency aws-lambda amazon-dynamodb
1个回答
0
投票

您有两种选择解决此问题:

  1. Java方式:假设您在主线程运行时启动新线程,则可以在主线程完成时(即在join()之前)将return辅助线程。样本:
// Main thread executing...
Thread t = new Thread(
                 new Runnable() {
                     public void run () {
                         //do something
                     }
                  }
    );
t.start(); //Secondary thread starts
// Main thread continues execution
t.join();//Main thread will wait for the secondary to finish
return ...;
  1. AWS方式:创建新的lambda函数,其唯一目的是执行单个任务(即更新DynamoDB)。调用此函数(而不是启动新线程)。您甚至可以异步执行此操作。
© www.soinside.com 2019 - 2024. All rights reserved.