Sag*_*gar 1 java performance java-8
如果我不关心线程安全哪个更好?
int[] index = {0};
index[0]++;
Run Code Online (Sandbox Code Playgroud)
VS
AtomicInteger index = new AtomicInteger(0);
index.getAndIncrement()
Run Code Online (Sandbox Code Playgroud)
AtomicInteger有一个原因的名称,在多线程访问的情况下它是原子的,其访问受到保护,可以被多个线程安全地增加(volatile如果你想要通过或屏障).这些成本显而易见.它执行一个CAS操作(比较和交换,即使它在许多CPU上都是本机的,它仍然不能与增加一个普通变量进行比较).
另一方面,int(或int数组或任何非线程安全对象)是一个普通变量,不需要同步访问任何东西; 但在多线程环境中,它是无用的(读取会产生不正确的结果).
在真正的竞争环境中有一些更快的东西叫做LongAdder,所以你可能想要使用它.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |