简体   繁体   English

在Java 8中以lambda块同步

[英]Synchronized in lambda blocks in JAVA 8

Can synchronized be used for some of the code blocks written in lambda expression block. 可以synchronized用于用lambda表达式块编写的某些代码块。 With respect to the following code snippet : 关于以下代码段:

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

Of course! 当然! Your block of code is logically equivalent to the following, assuming workFlowTask is of the type WorkFlowTask : 假设workFlowTask的类型为WorkFlowTask ,那么您的代码块在逻辑上等效于以下代码:

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

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

    newSetDuplication.add(taskName);
}

Obviously, the synchronized keyword can be used here, although there are many other things to consider before using it, especially within a loop . 显然,可以在这里使用synchronized关键字,尽管在使用它之前还需要考虑很多其他事项, 尤其是在循环中 Your forEach lambda is just syntactic sugar for a Consumer<WorkFlowTask> anyway, which you can also use synchronized with. 无论如何, forEach lambda只是Consumer<WorkFlowTask>语法糖,您也可以synchronizedConsumer<WorkFlowTask>一起使用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM