欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java多線程關(guān)鍵字final和static詳解

 更新時(shí)間:2020年01月08日 09:26:40   作者:sowhat1943  
這篇文章主要介紹了java多線程關(guān)鍵字final和static詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了java多線程關(guān)鍵字final和static詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

final關(guān)鍵字

1.final關(guān)鍵字在單線程中的特點(diǎn):   

1)final修飾的靜態(tài)成員:必須在進(jìn)行顯示初始化或靜態(tài)代碼塊賦值,并且僅能賦值一次。

2)final修飾的類(lèi)成員變量,可以在三個(gè)地方進(jìn)行賦值:顯示初始化、構(gòu)造代碼塊和構(gòu)造方法,并且僅能賦值一次。

3)final修飾的局部變量,必須在使用之前進(jìn)行顯示初始化(并不一定要在定義是賦值),僅能賦值一次。

總之,final修飾的靜態(tài)成員必須在類(lèi)加載完之前進(jìn)行賦值,final修飾的成員變量,必須在對(duì)象創(chuàng)建完之前進(jìn)行賦值。

補(bǔ)充:final修飾的基本數(shù)據(jù)類(lèi)型不能被重新賦值,final修飾的引用數(shù)據(jù)類(lèi)型,引用類(lèi)型的地址不能改變,引用類(lèi)型的內(nèi)部屬性可以改變。

2. final在多線程的作用  

  由于重排序的作用,一個(gè)線程讀取到一個(gè)對(duì)象的引用時(shí),該對(duì)象可能尚未初始化完畢,即這些線程可能讀取到該對(duì)象字段的默認(rèn)值而不是初始值。

final關(guān)鍵字具有特殊的作用:當(dāng)一個(gè)對(duì)象發(fā)布到其他線程的時(shí)候,該對(duì)象的所有final字段都是初始化完成的,即其他線程讀取到的都是相應(yīng)字段的初始值而不是默認(rèn)值。而非final字段就沒(méi)有這種保障。

對(duì)于final修飾的引用類(lèi)型的字段,該字段還能保障該字段所引用的對(duì)象 初始化完畢。

這種機(jī)制是通過(guò)禁止重排序?qū)崿F(xiàn)的:

對(duì)于final變量的寫(xiě):禁止final域的寫(xiě)重排序到構(gòu)造方法之外,即得到一個(gè)對(duì)象的引用時(shí),其內(nèi)部的final域必定已被初始化完畢。

對(duì)于final域的讀:禁止初次讀該對(duì)象的引用與讀該對(duì)象包含的final域進(jìn)行重排序。

這兩種重排序都是底層是通過(guò)內(nèi)存屏障實(shí)現(xiàn)的,編譯器會(huì)在final域?qū)懼?,?gòu)造函數(shù)執(zhí)行完之前插入一個(gè)storestore屏障,在讀final域之前插入一個(gè)loadload屏障。

static關(guān)鍵字

static關(guān)鍵字能夠保證一個(gè)線程即使在未使用其他線程同步機(jī)制的情況下也總是可以讀到一個(gè)類(lèi)靜態(tài)變量的初始值,但這種可見(jiàn)性的保障僅限于 初次讀取該變量

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA開(kāi)發(fā)環(huán)境搭建教程

    JAVA開(kāi)發(fā)環(huán)境搭建教程

    這篇文章主要為大家詳細(xì)介紹了JAVA開(kāi)發(fā)環(huán)境搭建教程,配置JAVA開(kāi)發(fā)環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • mybatis和mybatisplus批量插入問(wèn)題示例詳解

    mybatis和mybatisplus批量插入問(wèn)題示例詳解

    最近在處理一個(gè)功能的時(shí)候,需要批量插入數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于mybatis和mybatisplus批量插入問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 記一次springboot中用undertow的坑

    記一次springboot中用undertow的坑

    這篇文章主要介紹了記一次springboot中用undertow的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java多線程 原子性操作類(lèi)的使用

    Java多線程 原子性操作類(lèi)的使用

    這篇文章主要介紹了Java多線程 原子性操作類(lèi)的使用,在java5以后,我們接觸到了線程原子性操作,也就是在修改時(shí)我們只需要保證它的那個(gè)瞬間是安全的即可,經(jīng)過(guò)相應(yīng)的包裝后可以再處理對(duì)象的并發(fā)修改,本文總結(jié)一下Atomic系列的類(lèi)的使用方法,下面一起進(jìn)入文章了解詳細(xì)內(nèi)容
    2021-10-10
  • Linux將Spring Boot項(xiàng)目的Jar包注冊(cè)為開(kāi)機(jī)自啟動(dòng)系統(tǒng)服務(wù)的操作方法

    Linux將Spring Boot項(xiàng)目的Jar包注冊(cè)為開(kāi)機(jī)自啟動(dòng)系統(tǒng)服務(wù)的操作方法

    jar文件是從maven package打包出來(lái)的,config/application.yml是原先在項(xiàng)目的resources文件夾里,外置出來(lái)方便適配開(kāi)發(fā)環(huán)境和正式環(huán)境,這篇文章主要介紹了Linux將Spring Boot項(xiàng)目的Jar包注冊(cè)為開(kāi)機(jī)自啟動(dòng)系統(tǒng)服務(wù)的操作方法,需要的朋友可以參考下
    2023-10-10
  • Maven插件docker-maven-plugin的使用

    Maven插件docker-maven-plugin的使用

    在我們持續(xù)集成過(guò)程中,項(xiàng)目工程一般使用 Maven 編譯打包,然后生成鏡像,docker-maven-plugin 插件就是為了幫助我們?cè)贛aven工程中,通過(guò)簡(jiǎn)單的配置,自動(dòng)生成鏡像并推送到倉(cāng)庫(kù)中。感興趣的可以了解一下
    2021-06-06
  • JAVA對(duì)象clone方法代碼實(shí)例解析

    JAVA對(duì)象clone方法代碼實(shí)例解析

    這篇文章主要介紹了JAVA對(duì)象clone方法代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java實(shí)現(xiàn)三角形分形山脈

    java實(shí)現(xiàn)三角形分形山脈

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)三角形分形山脈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • MyBatis學(xué)習(xí)教程(八)-Mybatis3.x與Spring4.x整合圖文詳解

    MyBatis學(xué)習(xí)教程(八)-Mybatis3.x與Spring4.x整合圖文詳解

    這篇文章主要介紹了MyBatis學(xué)習(xí)教程(八)-Mybatis3.x與Spring4.x整合圖文詳解的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • 基于java實(shí)現(xiàn)斗地主代碼實(shí)例解析

    基于java實(shí)現(xiàn)斗地主代碼實(shí)例解析

    這篇文章主要介紹了基于java實(shí)現(xiàn)斗地主代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論