1. 程式人生 > >java關鍵字volatile、transient

java關鍵字volatile、transient

本問主要知識點:

 volatile 關鍵字

transient關鍵字

1.volatile:當多個執行緒進行操作共享資料時,可以保證記憶體中的資料可見,相對與synchronized是一種輕量級的鎖

 注意:1)volatile 不具有互斥性;2)不能保證變數的原子性

java.util.concurrent.atomic.包下提供了常用的原子變數:1)通過volatile保證記憶體可見性 2)CAS(compare-and-sawp)演算法保證資料的原子性
//測試方法 
public class TestVolatile {

   

    public static void main(String[] args){

     
        ThreadDeomo threadDeomo = new ThreadDeomo();

        new Thread(threadDeomo).start();
        while (true){
            if(threadDeomo.getFlag()){
                System.out.println("-----------------------------------");
                break;
            }
/*            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

              while (true){
                synchronized(threadDeomo){
                  if(threadDeomo.getFlag()){
                System.out.println("-----------------------------------");
                break;
                }
            }

            }
            */
        }

    }


    static class ThreadDeomo implements Runnable{

        private volatile boolean flag ;

        public boolean getFlag() {
            return flag;
        }

        public void setFlag(boolean flag) {
            this.flag = flag;
        }

        @Override
        public void run() {
            flag =true;
            System.out.println("flag="+getFlag());
        }
    }
}

2.transient:當一個物件被序列化的時候,transient型變數的值不包括在序列化的表示中,然而非transient型的變數是被包括進去的。

相關推薦

java關鍵字volatiletransient

本問主要知識點:  volatile 關鍵字 transient關鍵字 1.volatile:當多個執行緒進行操作共享資料時,可以保證記憶體中的資料可見,相對與synchronized是一種輕量級的鎖  注意:1)volatile 不具有互斥性;2)不能保證變數的原子性

JAVA VolatileTransient關鍵字

Volatile修飾的成員變數在每次被執行緒訪問時,都強迫從主記憶體中重讀該成員變數的值。而且,當成員變數發生變化時,強迫執行緒將變化值回寫到主記憶體。這樣在任何時刻,兩個不同的執行緒總是看到某個成員變數的同一個值。     Java語言規範中指出:為了獲得最佳速度,允許執

javavolatilesynchronized

htm mic eight 完成 安全問題 strong 跳過 ring 變量定義 先補充一下概念:Java 內存模型中的可見性、原子性和有序性。 可見性:   可見性是一種復雜的屬性,因為可見性中的錯誤總是會違背我們的直覺。通常,我們無法確保執行讀操作的線程能適時地看到其

Java關鍵字breakcontinuereturn的區別

語句 數據類型 ++ span pos 返回值 sys style OS 1.break break只能用於switch語句和循環語句中,跳出當前循環;但是如果是嵌套循環, 則只能跳出當前的這一層循環,只有逐層break才能跳出所有循環 for (in

java關鍵字 volatile的作用及使用說明

緩存 image 串行 最終 有序性 不能 重排序 設計 語義 先來看看這個關鍵字是什麽意思:volatile [?v?l?ta?l] adj. 易變的,不穩定的; 從翻譯上來看,volatile表示這個關鍵字是極易發生改變的。volatile是java語言中,最輕量級的

Java關鍵字staticfinal使用

static  1. static變數     按照是否靜態的對類成員變數進行分類可分兩種:一種是被static修飾的變數,叫靜態變數或類變數;另一種是沒有被static修飾的變數,叫例項變數。兩者的區別是: 

#Java 關鍵字volatile 與 synchronized 作用與區別,你知道嗎?

Java關鍵字volatile與synchronized作用是什麼,區別又是什麼呢?下面我們可以看看: 如果有想要學習java的小夥伴,可來我們的java學習扣裙哦:72340,3928裡面贈送java系列教學視訊和資料!小編也是從事了6年java開發的全棧工程

java關鍵字——thissuperfinalstatic

this()和super()必須出現在構造的第一行,因此不可能同時出現。 並且this和super關鍵字不能出現在static修飾的方法中,static修飾的方法是屬於類的,該方法的呼叫者可能是一個類,而不是物件。所以this和super限定也就失去了意義。 1

Java關鍵字thissuper的使用注意事項

 public Son() {  super();      //呼叫超類的構造方法,只能放到第一行.  System.out.println("Son無引數構造方法被呼叫!");  //super();      //錯誤的,必須放到構造方法體的最前面. } this只能在類中的非靜態方法中使用,靜態方法和

Java關鍵字finalstatic使用總結

public class TestStaticFinal {          private static final String strStaticFinalVar = "aaa";          private static String strStaticVar = null;        

Java關鍵字volatile,原子性,變數可見性

The volatile keyword also ensures visibility across the application. If you declare a field to be volatile, this means that as soon as a write occurs for t

java關鍵字nativestaticfinal詳解

native: native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前檔案,而是在用其他語言(如C和C++)實現的檔案中。Java語言本身不能對作業系統底層進行訪問和操作,但是可以通過JNI介面呼叫其他語言來實現對底層的訪問。 JNI是Java

Java關鍵字volatile修飾變數

  volatile關鍵字的作用是告訴編譯器,凡是被該關鍵字申明的變數都是易變的、不穩定的,所以不要試圖對該變數使用快取等優化機制,而應當每次都從他的記憶體地址中去讀取值,但volatile並不是每次更

Java關鍵字finalstaticthissuper使用總結

this & super   在上一篇拙作中,我們討論了static的種種用法,通過用static來定義方法或成員,為我們程式設計提供了某種便利,從某種程度上可以說它類似於C語言中的全域性函式和全域性變數。但是,並不是說有了這種便利,你便可以隨處使用,如果那樣的話,你便需要認真考慮一下自己是否在用面向

深入彙編指令理解Java關鍵字volatile

## volatile是什麼 volatile關鍵字是Java提供的一種輕量級同步機制。它能夠保證可見性和有序性,但是不能保證原子性 ## 可見性 對於volatile的可見性,先看看這段程式碼的執行 - `flag`預設為`true` - 建立一個執行緒A去判斷`flag`是否為`true

Java關鍵字transientvolatile小結

java pre txt 關鍵字 代碼 字段 代碼優化 class 保存 transient 類型修飾符,只能用來修飾字段。 在對象序列化的過程中,標記為transient的變量不會被序列化。 class Test { transient int a; // 不

java併發程式設計的藝術(二)---重排序與volatilefinal關鍵字

重排序:是指編譯器和處理器為了優化程式效能而對指令序列進行重新排序的一種手段。 當資料依賴的時候不允許產生重排序,多執行緒有些情況下重排序會影響語義。 volatile 定義的的物件記憶體對多執行緒之間是立馬可見的,他建立了先寫後讀happens-before關係,常用來在多執行緒中進行flag標誌位的判

Java關鍵字之native,strictfp,transientvolatile

 Java關鍵字(keywords) abstract    default    if            private      this boolean     do         implements    protected    throw break   

java中 static,final,transient,volatile關鍵字的作用

static 和final   static  靜態修飾關鍵字,可以修飾 變數,程式塊,類的方法;  當你定義一個static的變數的時候jvm會將將其分配在記憶體堆上,所有程式對它的引用都會指向這一個地址而不會重新分配記憶體; 修飾一個程式塊的時候(也就是直接將程式碼寫在

總結java中staticfinaltransient關鍵字的作用

1. transient使用1)被transient關鍵字修飾的變數不再能被序列化,一個靜態變數不管是否被transient修飾,均不能被序列化。2)一旦變數被transient修飾,變數將不再是物件持久化的一部分,該變數內容在序列化後無法獲得訪問。3)transient關鍵