物件及變數併發訪問 髒讀

2021-09-14 00:08:34 字數 921 閱讀 4456

當多個執行緒呼叫同乙個方法時,為了避免資料出現交叉的情況,使用synchronized關鍵字進行同步。

雖然賦值時進行了同步,但是在取值時有可能出現一些意想不到的意外,這種情況就是髒讀。發生髒讀的情況就是在讀取例項變數時,此值已經被其他執行緒更改過了。

public

class

publicvar

catch

(interruptedexception e)

this

.password = password;

system.out.

println

(thread.

currentthread()

.getname()

+",value:"

+this

.username+

this

.password);}

/** * 因為這個方法不是同步的,所以會出現髒讀 synchronized

*/public

void

getvalue()

public

class

t1extends

thread

@override

public

void

run(

)}

public

class

run}

執行結果:

出現髒讀原因是public void getvalue()方法不是同步的,所以可以在任意時刻呼叫。解決辦法是加上synchronrzed.

多執行緒之物件及變數的併發訪問 五 資料髒讀

在前面文章的學習中,我們一直都在圍繞 synchronized 來講述,在方法沒有同步處理的時候,多個執行緒訪問乙個例項變數的時候,這個值已經被其他的執行緒更改過了,所以會出現資料髒讀 dirtyread 這個資料髒讀也出現了好多次,那麼本文就來看看到底是什麼東西 執行緒資料髒讀跟資料庫的事務髒讀又...

物件及變數的併發訪問

10 volatile的作用是強制從公共堆疊中讀取變數的值,而不是從執行緒私有資料堆疊取得變數的值 例項情況 在jvm被設定為 server模式時,為了執行緒的執行效率,執行緒一直在私有堆疊中取得執行緒變數的值,11 volatile增加了例項變數在多執行緒之間的可見性,但它卻不具有同步性,也就不具...

多個執行緒訪問避免髒讀

package com.freeflying.thread.base classname datashare description 多個執行緒訪問乙個變數,如果多個執行緒同時訪問,避免資料髒讀問題 author freeflying date 2018年6月22日 public class dat...