網際網路併發程式設計(3) 髒讀

2021-08-17 17:05:58 字數 1198 閱讀 8464

內容

資料的髒讀

對於物件的同步和非同步的方法中,我們在設計程式時候要注意問題的整體性,否則就會出現資料不一致情況,最典型的就是髒讀。

髒讀的定義:

髒讀又稱無效資料的讀出,是指在資料庫訪問中,事務t1將某一值修改,然後事務t2讀取該值,此後t1因為某種原因撤銷對該值的修改,這就導致了t2所讀取到的資料是無效的。

也就是指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。因為這個資料是還沒有提交的資料,那麼另外乙個事務讀到的這個資料是髒資料,依據髒資料所做的操作可能是不正確的。

案例:如下就是乙個髒讀

package com.wuk.thread;

public

class

threadtest04

extends

thread catch (interruptedexception e)

this.password=password;

system.out.println("setvalue的結果為:username="+this.username+"password="+this.password);

}public

void

getvalue()

public

static

void

main(string args)

});t1.start();

try catch (interruptedexception e)

tt01.getvalue();

}}

結果:

很明顯結果對應錯誤 tom對應的密碼是234,而不是123

getvalue的結果為:username=tompassword=123

setvalue的結果為:username=tompassword=234

是因為在t1執行緒set值時候,主線程去訪問get值了,結果導致值錯誤,那麼正確的做法是給set get方法都加上鎖synchronized,這樣當t1執行緒正在訪問set方法時候,持有該物件的鎖,主線程只有等待。從側面也說明了乙個物件一把鎖。

總結:

在我們對乙個物件的方法進行加鎖時候,要考慮到業務的整體性,要在set值的時候想到給get方法加鎖同步,保證業務的原子性。

網際網路併發程式設計(1) 執行緒基礎

1 執行緒安全概念 當多個執行緒訪問某乙個類 物件或方法 時候,這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的。2 synchronized 可以在任意物件以及方法上加鎖,而加鎖的這段 稱為互斥區或者臨界區。案例1 不加synchronized package com.wu...

mysql 網際網路 MySQL網際網路業務使用建議

一 基礎規範 表儲存引擎必須使用innodb 表字符集預設使用utf8,必要時候使用utf8mb4 解讀 1 通用,無亂碼風險,漢字3位元組,英文1位元組 2 utf8mb4是utf8的超集,有儲存4位元組例如表情符號時,使用它 禁止使用儲存過程,檢視,觸發器,event 解讀 1 對資料庫效能影響...

網際網路與網際網路的區別

網際網路的英文單詞是 internet,網際網路的英文單詞是 internet。在英語中,專有名詞首字母都是大寫,用於特指某一事物。大寫的 internet 是作為乙個專有名詞出現的,所指的是由阿帕網發展而來的現如今全球最大的計算機網路,稱之為網際網路。小寫 internet 是作為乙個普通單詞出現...