【发布时间】:2016-06-30 12:35:53
【问题描述】:
public void tSafe(List<Foo> list, Properties status) {
if(list == null) return;
String key = "COUNT";
AtomicInteger a = new AtomicInteger(Integer.valueOf(status.getProperty(key,"0")));
list.parallelStream().filter(Foo::check).
forEach(foo -> {status.setProperty(key, String.valueOf(a.incrementAndGet())); }
);
}
private interface Foo {
public boolean check();
}
说明:
在上面的示例中,status 是一个共享属性,它包含一个名为 COUNT 的键。我的目标是增加计数并将其放回属性中以计算执行的检查次数。考虑 tSafe 方法被多个线程调用,最后我得到正确的计数吗?请注意,我使用 AtomicInteger a 作为局部变量。
【问题讨论】:
-
线程安全并不是那种在各种多线程结构周围散布会产生线程安全的东西。
标签: java multithreading