日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 基本类型 线程安全_java的基本类型和i++线程安全性的深入解析

發布時間:2023/12/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 基本类型 线程安全_java的基本类型和i++线程安全性的深入解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在java中,除了long和double的8個字節、64位比特的變量外,其他的基本變量都是原子性的。

java存儲模型要求獲取和存儲操作都為原子性,但是對于非volatile的long和double變量,jvm允許將64位的讀或寫劃分為兩個32位的操作。

如果讀和寫發生在不同的線程,這種情況讀取一個非volatile類型long就可能會出現得到一個值的高32位和另一個值的低32位。

因此,即使你并不關心過期數據,但僅僅在多線程程序中使用共享的、可變的long和double變量也可能是不安全的,除非將它們聲明為volatile,或者用鎖保護起來。

說起原子性的操作,是指讀和寫是原子性的,比如i=5;這個就是一個原子性的操作。

但是兩個原子性的操作合在一起進行,就不一定是原子性的了,比如先讀后寫,那么就有可能在讀之后這個變量被修改過。

i++就是這樣的一個操作,先讀后寫,所以說整型變量是原子性的,不是說i++就是一個原子性的操作。

當你使用for(int i=0; i<10000; i++){System.out.print(i)}

你會發現,i到最后不會打印出10000,打印出8-9千左右。

但是在多線程的情況下,就算整型變量是原子性的,也有可能會出現線程安全的問題,這個是線程可見性的問題,所以需要加上volatile聲明才行,

該修飾符是強制變量每次從內存中讀取,而不會存儲在寄存器中。

總結

以上是生活随笔為你收集整理的java 基本类型 线程安全_java的基本类型和i++线程安全性的深入解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。