java - lambda 表达式中的 AtomicInteger 变量

标签 java lambda java-8 vert.x

我有一个 AtomicInteger 变量声明为实例变量,如下所示:

public class Test_class {  
    AtomicInteger status_flag = new AtomicInteger(1);  
    public Test_class() {  
    }  
    ...  

在代码中,我在 for 循环中使用此变量,并且在 for 循环内我有一个更新此变量的 lambda 表达式。代码是这样的

public void some_class_func () {  
...

for (int i=0; i< 10 && status_flag.get() == 1; i++) {  
    ...
    dummy_func(x, test_lambda -> {  
        ...
        if (some error occurs) {
            status_flag.set(0);
        }
        ...
    });
}//END for
}//END func

这是确保不会出现任何并发问题的正确方法吗?如果为 lambda 表达式中的每个 i 生成一个新线程,我能否确定使用 AtomicInteger 将确保 for 循环读取正确的 status_flag 值?

感谢您的所有帮助。

编辑:我正在使用使用异步编程的 Vert.x Framework。

最佳答案

当您执行以下任何操作时,不会自动生成任何线程:

  1. 创建一个 lambda;
  2. 将其传递给方法;
  3. 调用由 lambda 实现的功能接口(interface)的方法。

由于您提供的代码绝不意味着将从另一个线程调用 lambda(您没有提供任何真正的 API 调用),因此没有迹象表明您面临并发问题。

关于java - lambda 表达式中的 AtomicInteger 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31837687/

相关文章:

c++ - 将通用 Lambda 与 std::find_if 结合使用

c++ - 如何在不存储连接的情况下断开 lambda 函数

java - lambda 中的方法是否仅在执行 lambda 时才被评估?

java - 在 Java 中编写自定义异常名称的最佳方式

java - 在同一类的特定实例之间共享数据

javascript - Webpack 和 AWS Lambda 问题 - 模块上缺少处理程序

java - "Runnable::run"- 这是如何创建 Executor 实例的?

hadoop - 构建不适合内存的流

java - EJB 本地调用出现错误目标异常

java - 如何从一个 JavaFX 选项卡对数据库添加的内容反射(reflect)在不同的 JavaFX 选项卡中?