synchronized詳解 synchronized怎么讀?
synchronized怎么讀?volatile與synchronized的區(qū)別與聯(lián)系:在Java中,為了保證多線程讀寫數(shù)據(jù)時(shí)數(shù)據(jù)的一致性,可以采用兩種方式:使用volatile關(guān)鍵字:在一句話中泛化
synchronized怎么讀?
volatile與synchronized的區(qū)別與聯(lián)系:
在Java中,為了保證多線程讀寫數(shù)據(jù)時(shí)數(shù)據(jù)的一致性,可以采用兩種方式:使用volatile關(guān)鍵字:在一句話中泛化volatile,當(dāng)變量值發(fā)生變化時(shí),可以讓其他線程盡快知道。例如,使用synchronized關(guān)鍵字表示或使用lock對(duì)象。Volatile是一個(gè)變量修飾符,synchronized是一個(gè)方法或塊修飾符。所以我們使用這兩個(gè)關(guān)鍵字來指定三種訪問變量的簡(jiǎn)單方法。因此,volatile只能在線程內(nèi)存和主存之間同步一個(gè)變量的值,而synchronized在線程內(nèi)存和主存之間同步所有變量的值,并通過鎖定和釋放偵聽器來實(shí)現(xiàn)。顯然,synchronized將比volatile消耗更多的性能。
volatile的本質(zhì)是告訴JVM寄存器中當(dāng)前變量的值是不確定的,需要從主存中讀取。Synchronized是鎖定當(dāng)前變量。只有當(dāng)前線程可以訪問變量,其他線程被阻止。
Volatile只能在可變級(jí)別使用,而synchronized可以在可變級(jí)別和方法級(jí)別使用。Volatile只能實(shí)現(xiàn)變量的修改可見性,但它不具有原子屬性。Volatile不會(huì)導(dǎo)致線程阻塞,而synchronized可能會(huì)導(dǎo)致線程阻塞。用volatile標(biāo)記的變量不由編譯器優(yōu)化,而用synchronized標(biāo)記的變量可以由編譯器優(yōu)化。
synchronize怎么讀?
例如,您可以刪除它們或請(qǐng)求同步它們。