mal*_*din 3 java lambda java-8
我正在阅读Richard Warburton的Java 8 Lambdas一书中的lambdas.他开始在现代CPU中使用并发性进行讨论,并最终将它与lambdas相关联.我不知道我错过了什么,但我肯定没有得到这个概念.考虑以下课程
class A {
private int state;
A(){
state = 0;
}
A(int state){
this.state = state;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
@Override
public String toString() {
return Integer.toString(state);
}
} // end A
public class Main {
public static void main(String[] args) {
List<A> ls = new ArrayList<>();
ls.add(new A(2));
ls.add(new A(3));
ls.forEach( a -> a.setState(a.getState() + 1) );
System.out.println(ls); // [3, 4]
} // end main
} // end class Main
Run Code Online (Sandbox Code Playgroud)
这个结构如何ls.forEach( a -> a.setState(a.getState() + 1) );更适合并发编程而不是
ls.forEach(new Consumer<A>() {
@Override
public void accept(A t) {
t.setState(t.getState() + 1);
}
});
Run Code Online (Sandbox Code Playgroud)
Lambdas可能不会反对匿名类,但内部迭代(使用forEach)与外部迭代(使用增强for循环)相反.在这种情况下,它是有道理的.像这样的外部迭代无法并行化:
for(A a : ls) {
a.setState(a.getState() + 1);
}
Run Code Online (Sandbox Code Playgroud)
相反,内部迭代不受限制:如果方法规范允许(例如Stream.forEach()),只要客户端代码遵守某些规则(例如,不修改共享状态),它就可以在不改变客户端代码的情况下进行并行化.从这个意义上说,内部迭代更加友好.
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |