gpt4 book ai didi

java - 我们可以在方法中使用 AtomicInteger 作为局部变量并实现线程安全吗?

转载 作者:搜寻专家 更新时间:2023-11-01 00:55:13 26 4
gpt4 key购买 nike

 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();
}

Description:

在上面的例子中,status 是一个共享属性,它包含一个名为 COUNT 的键。我的目标是增加计数并将其放回属性中以计算执行的检查次数。考虑到 tSafe 方法被多个线程调用,我最后得到的计数是否正确?请注意,我使用 AtomicInteger a 作为局部变量。

最佳答案

如果你只有一个线程,这会工作,但是如果你有多个线程调用它,你有一些线程安全的操作。如果每个线程都在不同的 liststatus 对象上运行,这将很好。

由于 status 是一个线程安全的集合,您可以锁定它,并且如果 list 在另一个线程中未更改,则可以。

一般来说,以线程安全的方式将字符串作为数字使用是非常棘手的。你最好制作你的值(value)线程,即一个 AtomicInteger 而不是其他任何东西。

关于java - 我们可以在方法中使用 AtomicInteger 作为局部变量并实现线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36005048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com