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


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM