gpt4 book ai didi

java - run() 方法的同步

转载 作者:行者123 更新时间:2023-12-01 07:51:14 25 4
gpt4 key购买 nike

public class Process extends Thread {

private static int count=0;

@Override
public void run()
{
for (int i=0; i< 1000000000; i++)
count++;
} }

考虑上面的代码片段。如果运行更多 Process 类型的线程,则由于对静态变量的并发访问,此代码不是线程安全的。

如何使这段代码“线程安全”?

是否可以选择附上 count++static synchronized内方法并调用它?

最佳答案

您最好使用内置同步累加器,例如 AtomicInteger

 AtomicInteger count = new AtomicInteger(0);

for (int i=0; i< 1000000000; i++)
count.incrementAndGet();

Java 8 附带的另一个累加器是 LongAdder这在高争用情况下提供了更高的吞吐量,但代价是更多的空间

 LongAdder longAdder = new LongAdder();

for (int i=0; i< 1000000000; i++)
longAdder.increment();

System.out.println(longAdder.sum());

AtomicIntegerlocks 非常适合并发访问,但如果您想要实现并行性,则给出 LongAccumulatorLongAdders一看,它们应该在多核上更好地扩展

关于java - run() 方法的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37198316/

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