java - 在 JAVA 8 的 lambda block 中同步

标签 java lambda java-8

可以将synchronized用于一些用lambda表达式 block 编写的代码块。关于以下代码片段:

workflowTasks.forEach((workflowTask) -> {
        String taskName = workflowTask.getTaskName();
        if (profileNames.containsKey(taskName) || newSetDuplication.contains(taskName)) {
            errorMessages.append(taskName + ",");
        }
        newSetDuplication.add(taskName);
    });

最佳答案

当然!您的代码块在逻辑上等同于以下内容,假设 workFlowTask类型为WorkFlowTask :

for (WorkFlowTask workFlowTask : workFlowTasks) {
    String taskName = workflowTask.getTaskName();

    if (profileNames.containsKey(taskName) || newSetDuplication.contains(taskName)) {
        errorMessages.append(taskName + ",");
    }

    newSetDuplication.add(taskName);
}

显然,synchronized此处可以使用关键字,尽管在使用它之前还有许多其他事情需要考虑,尤其是在循环内。您的forEach lambda 只是 Consumer<WorkFlowTask> 的语法糖。无论如何,您也可以使用 synchronized与。

关于java - 在 JAVA 8 的 lambda block 中同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49053631/

相关文章:

尝试通过反射设置实例时抛出 java.lang.IllegalArgumentException

c++ - lambda 函数的返回类型推导不起作用

java - Java 8 中的 map() 和 flatMap() 方法有什么区别?

c# - 如何识别类型为 "field reference"的 Lambda MemberExpression

node.js - 如何以编程方式将 AWS lambda 触发器设置为 Alexa Skills

java - 嵌套 BiFunction 的深度(或限制,如果有的话)是多少

java - 使用 Java 8 时间 API 根据当前日期在三个月内填充一周的最后几天(周一至周日)的 arrayList

java - java中比较两个不同大小数组的元素并返回 boolean 数组

java - Eclipse 中的 Checkstyle 错误 - 无法实例化 Tab 字符

java - 如何确保客户端-服务器应用程序中的通信安全?