我有一个 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。
最佳答案
当您执行以下任何操作时,不会自动生成任何线程:
- 创建一个 lambda;
- 将其传递给方法;
- 调用由 lambda 实现的功能接口(interface)的方法。
由于您提供的代码绝不意味着将从另一个线程调用 lambda(您没有提供任何真正的 API 调用),因此没有迹象表明您面临并发问题。
关于java - lambda 表达式中的 AtomicInteger 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31837687/