您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(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 } }
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ò),請把它分享出去讓更多的人看到。
免責(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)容。