synchronized可以用于用lambda表达式块编写的某些代码块吗?关于以下代码段:

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一起使用。

09-27 03:17