java多線程關(guān)鍵字final和static詳解
這篇文章主要介紹了java多線程關(guān)鍵字final和static詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
final關(guān)鍵字
1.final關(guān)鍵字在單線程中的特點(diǎn):
1)final修飾的靜態(tài)成員:必須在進(jìn)行顯示初始化或靜態(tài)代碼塊賦值,并且僅能賦值一次。
2)final修飾的類成員變量,可以在三個地方進(jìn)行賦值:顯示初始化、構(gòu)造代碼塊和構(gòu)造方法,并且僅能賦值一次。
3)final修飾的局部變量,必須在使用之前進(jìn)行顯示初始化(并不一定要在定義是賦值),僅能賦值一次。
總之,final修飾的靜態(tài)成員必須在類加載完之前進(jìn)行賦值,final修飾的成員變量,必須在對象創(chuàng)建完之前進(jìn)行賦值。
補(bǔ)充:final修飾的基本數(shù)據(jù)類型不能被重新賦值,final修飾的引用數(shù)據(jù)類型,引用類型的地址不能改變,引用類型的內(nèi)部屬性可以改變。
2. final在多線程的作用
由于重排序的作用,一個線程讀取到一個對象的引用時,該對象可能尚未初始化完畢,即這些線程可能讀取到該對象字段的默認(rèn)值而不是初始值。
final關(guān)鍵字具有特殊的作用:當(dāng)一個對象發(fā)布到其他線程的時候,該對象的所有final字段都是初始化完成的,即其他線程讀取到的都是相應(yīng)字段的初始值而不是默認(rèn)值。而非final字段就沒有這種保障。
對于final修飾的引用類型的字段,該字段還能保障該字段所引用的對象 初始化完畢。
這種機(jī)制是通過禁止重排序?qū)崿F(xiàn)的:
對于final變量的寫:禁止final域的寫重排序到構(gòu)造方法之外,即得到一個對象的引用時,其內(nèi)部的final域必定已被初始化完畢。
對于final域的讀:禁止初次讀該對象的引用與讀該對象包含的final域進(jìn)行重排序。
這兩種重排序都是底層是通過內(nèi)存屏障實(shí)現(xiàn)的,編譯器會在final域?qū)懼螅瑯?gòu)造函數(shù)執(zhí)行完之前插入一個storestore屏障,在讀final域之前插入一個loadload屏障。
static關(guān)鍵字
static關(guān)鍵字能夠保證一個線程即使在未使用其他線程同步機(jī)制的情況下也總是可以讀到一個類靜態(tài)變量的初始值,但這種可見性的保障僅限于 初次讀取該變量
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用
- java 中的static關(guān)鍵字和final關(guān)鍵字的不同之處
- Java中final、static關(guān)鍵字與方法的重寫和繼承易錯點(diǎn)整理
- Java中的static和final關(guān)鍵字的使用詳解
- Java關(guān)鍵字final、static使用總結(jié)
- 學(xué)習(xí)Java的static與final關(guān)鍵字
- Java關(guān)鍵字詳解之final static this super的用法
- Java static 與 final關(guān)鍵字實(shí)例詳解
- Java中static與final關(guān)鍵字詳解(簡單易懂)
相關(guān)文章
基于Java?SpringBoot的前后端分離信息管理系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
當(dāng)今社會,人才的流動速度大大增加,因此也對黨建工作的管理層面工作帶來了空前且復(fù)雜的挑戰(zhàn),從而使得如何高效的開展管理黨建工作成為了亟待解決的問題。本文將介紹通過Java?SpringBoot實(shí)現(xiàn)前后端分離信息管理系統(tǒng),感興趣的同學(xué)可以了解一下2021-11-11
Java實(shí)現(xiàn)通過IP獲取IP歸屬地的方法(離線+在線)
我們都知道安全攻擊都是在某臺客戶機(jī)上執(zhí)行某些惡意操作致使服務(wù)端響應(yīng)異常崩潰亦或響應(yīng)數(shù)據(jù)被篡改,首先我想到的是對訪問的web端做一個IP的校驗(yàn),那么我們首先得知道客戶端的IP是多少,接下來此文重點(diǎn)介紹如何獲得,需要的朋友可以參考下2023-10-10
詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量
這篇文章主要介紹了Spring Boot 應(yīng)用如何提高服務(wù)吞吐量,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
collection集合體系與并發(fā)修改異常的解決方法
今天小編就為大家分享一篇關(guān)于collection集合體系與并發(fā)修改異常的解決方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03

