溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中final域的內(nèi)存語義是什么

發(fā)布時(shí)間:2021-05-12 10:10:18 來源:億速云 閱讀:130 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)java中final域的內(nèi)存語義是什么,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

1、說明

對于final域的內(nèi)存語義,編譯器和處理器要遵守兩個(gè)重排序規(guī)則(內(nèi)部實(shí)現(xiàn)也是使用內(nèi)存屏障):

寫final域的重排序規(guī)則:在構(gòu)造函數(shù)內(nèi)對一個(gè)final域的寫入,與隨后把這個(gè)被構(gòu)造對象的引用賦值給一個(gè)引用變量,這兩個(gè)操作之間不能重排序。

讀final域的重排序規(guī)則:初次讀一個(gè)包含final域的對象的引用,與隨后初次讀這個(gè)final域,這兩個(gè)操作之間不能重排序。

2、實(shí)例

public class FinalExample {
       int i;//普通域
       final int j;//final域
       static FinalExample obj;
       
       public FinalExample () {
              i = 1;//寫普通域。對普通域的寫操作【可能會(huì)】被重排序到構(gòu)造函數(shù)之外
              j = 2;//寫final域。對final域的寫操作【不會(huì)】被重排序到構(gòu)造函數(shù)之外
       }
       
       // 寫線程A執(zhí)行
       public static void writer () {?   
              obj = new FinalExample ();
       }
       
       // 讀線程B執(zhí)行
       public static void reader () {?   
              FinalExample object = obj;//讀對象引用
              int a = object.i;//讀普通域??赡軙?huì)看到結(jié)果為0(由于i=1可能被重排序到構(gòu)造函數(shù)外,此時(shí)y還沒有被初始化)
              int b = object.j;//讀final域。保證能夠看到結(jié)果為2
       }
}

常用的java框架有哪些

1.SpringMVC,Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請求驅(qū)動(dòng)類型的輕量級(jí)Web框架。2.Shiro,Apache Shiro是Java的一個(gè)安全框架。3.Mybatis,MyBatis 是支持普通 SQL查詢,存儲(chǔ)過程和高級(jí)映射的優(yōu)秀持久層框架。4.Dubbo,Dubbo是一個(gè)分布式服務(wù)框架。5.Maven,Maven是個(gè)項(xiàng)目管理和構(gòu)建自動(dòng)化工具。6.RabbitMQ,RabbitMQ是用Erlang實(shí)現(xiàn)的一個(gè)高并發(fā)高可靠AMQP消息隊(duì)列服務(wù)器。7.Ehcache,EhCache 是一個(gè)純Java的進(jìn)程內(nèi)緩存框架。

關(guān)于“java中final域的內(nèi)存語義是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI