面试题:double和long为什么不是线程安全的?

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

posted @ 2020-09-15 20:10  迷思t无  阅读(939)  评论(0)    收藏  举报