long double在64bit环境里是按照两个32bit操作的,所以赋值不是atomic的。在并发线程中保证atomic,需要注意。
- 使用java.util.concurrent.atomic中atomicLong,atomicDouble。
- 使用lock,unlock同步赋值操作
- 使用volatile 定义变量
- 几种方式的性能未知
volatile基本含义是更新cpu cache中的值到main memory。在多线程环境中,不同线程变量值不一定会实时同步到main memory,会导致shared对象的值不一致。volatile可以确保shared object值一致,对读数据来说这就足够了,但对写操作,仍需要处理多线程同时写的问题。