卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

volatile關(guān)鍵字用法 static和Volatile的區(qū)別?

static和Volatile的區(qū)別?變量被放在主內(nèi)存中,每個(gè)使用變量的線程都會將一個(gè)副本從主內(nèi)存復(fù)制到自己的工作區(qū)進(jìn)行操作。JAVA內(nèi)存模型負(fù)責(zé)保持主內(nèi)存區(qū)域中字段的值與每個(gè)線程的工作區(qū)同步,即保持

static和Volatile的區(qū)別?

變量被放在主內(nèi)存中,每個(gè)使用變量的線程都會將一個(gè)副本從主內(nèi)存復(fù)制到自己的工作區(qū)進(jìn)行操作。

JAVA內(nèi)存模型負(fù)責(zé)保持主內(nèi)存區(qū)域中字段的值與每個(gè)線程的工作區(qū)同步,即保持一致。

Static:聲明此字段是靜態(tài)的(可能由多個(gè)實(shí)例共享)。在主存中,這個(gè)類的所有實(shí)例的這個(gè)字段都是同一個(gè)變量,即唯一性。

Volatile,聲明變量值的一致性;static,聲明變量的唯一性。

另外,volatile同步機(jī)制不同于synchronized,前者是內(nèi)存同步,后者不僅包括內(nèi)存同步(一致性),還保證線程互斥(互斥)。

Static只聲明主存變量的唯一性,不能保證工作區(qū)變量值與主存變量值的一致性。除非變量的值是不可變的,即使用final修飾符,否則static聲明的變量不是線程安全的。

以下內(nèi)容摘自Java語言規(guī)范的官方解釋:

1)如果一個(gè)字段被聲明為靜態(tài)的,那么該字段實(shí)際上只存在一個(gè)條目,而不管可以創(chuàng)建多少個(gè)類實(shí)例(可能為零)。

2)一個(gè)字段可能被聲明為volatile,在這種情況下,Java內(nèi)存模型保證所有線程都會看到變量的一致值。

java中volatile和synchronize的區(qū)別和比較?

1。Volatile是線程同步的輕量級實(shí)現(xiàn),因此Volatile的性能優(yōu)于synchronize;Volatile只能用來修改變量,synchronize可以用來修改方法和代碼塊。隨著JDK技術(shù)的發(fā)展,同步在執(zhí)行效率上會有很大的提高,所以同步在項(xiàng)目的過程中還是比較普遍的。對volatile的多線程訪問將不會阻塞;而同步將阻塞;

3。Volatile可以保證私有內(nèi)存和主內(nèi)存之間變量的同步,但不能保證變量的原子性;同步可以保證變量的原子性;

4。Volatile是多線程間變量的可見性;synchronize是多線程間訪問資源的同步;對于Volatile修改的變量,可以解決讀取時(shí)變量的可見性問題,但不能保證原子性。對于多線程訪問同一實(shí)例變量,需要鎖同步。