Java虚拟机规范定义的许多规则中的一条:所有对基本类型的操作,除了某些对long类型和double类型的操作之外,都是原子级的。
目前的JVM(java虚拟机)都是将
32位作为原子操作,并非64位。
当线程把主存中的 long/double类型的值读到线程内存中时,可能是
两次32位值的写操作,显而易见,如果几个线程同时操作,那么就可能会出现高低2个32位值出错的情况发生。
要在线程间共享long与double字段是,必须在synchronized中操作,或是声明为volatile。