Java中对AtomicInteger和int值在多线程下递增操作的测试(2)
普通PC机上的执行结果类似如下:
--------------testAtomic(); 预期两者相等------------------- 耗时: 85366ms threadCount = 100; loopCount = 10000600; sum = 1000060000; --------------testIntAdd(); 预期两者不相等------------------- 耗时: 1406ms threadCount = 100; loopCount = 10000600; sum = 119428988;
从中可以看出, AtomicInteger操作 与 int操作的效率大致相差在50-80倍上下,当然,int很不消耗时间,这个对比只是提供一个参照。
如果确定是单线程执行,那应该使用 int; 而int在多线程下的操作执行的效率还是蛮高的, 10亿次只花了1.5秒钟;
(假设CPU是 2GHZ,双核4线程,理论最大8GHZ,则每秒理论上有80亿个时钟周期,
10亿次Java的int增加消耗了1.5秒,即 120亿次运算, 算下来每次循环消耗CPU周期 12个;
个人觉得效率不错, C 语言也应该需要4个以上的时钟周期(判断,执行内部代码,自增判断,跳转)
前提是: JVM和CPU没有进行激进优化.
)
而 AtomicInteger 效率其实也不低,10亿次消耗了80秒, 那100万次大约也就是千分之一,80毫秒的样子.