如何確保執行緒安全

2021-09-29 22:20:13 字數 1284 閱讀 2874

1.synchronized關鍵字,就是用來控制線程同步的,保證我們的執行緒在多執行緒環境下,不被多個執行緒同時執行,確保我們資料的完整性,使用方法一般加在方法上。

public

class

threaddemo

}

需要注意的是,synchronized鎖的是括號裡的物件,而不是**,其次,對於非靜態的synchronized方法,鎖的是物件本身也就是this。

當synchronized鎖住乙個物件之後,別的執行緒如果想要獲取鎖物件,那麼就必須等這個執行緒執行完釋放鎖物件之後才可以,否則一直處於等待狀態。

lock

lock的引入讓鎖有了可操作性,就是我們在需要的時候去手動的獲取鎖和釋放鎖,甚至我們還可以中斷獲取以及超時獲取的同步特性,但是從使用上說lock明顯沒有synchronized使用起來方便快捷。

private lock lock =

newreentrantlock()

;// reentrantlock是lock的子類

private

void

method

(thread thread)

catch

(exception e)

finally

}

進入方法我們首先要獲取到鎖,然後去執行我們業務**,這裡跟synchronized不同的是,lock獲取的所物件需要我們親自去進行釋放,為了防止我們**出現異常,所以我們的釋放鎖操作放在finally中,因為finally中的**無論如何都是會執行的。

寫個主方法,開啟兩個執行緒測試一下我們的程式是否正常:

public

static

void

main

(string[

] args)},

"t1");

// 執行緒2

thread t2 =

newthread

(new

runnable()

},"t2");

t1.start()

; t2.

start()

;}

其實在lock還有幾種獲取鎖的方式,我們這裡再說一種,就是trylock()這個方法跟lock()是有區別的,lock在獲取鎖的時候,如果拿不到鎖,就一直處於等待狀態,直到拿到鎖,但是trylock()卻不是這樣的,trylock是有乙個boolean的返回值的,如果沒有拿到鎖,直接返回false,停止等待,它不會像lock()那樣去一直等待獲取鎖。

網上應用,如何確保你的資訊保安?

又有新巨頭雄心勃勃準備邁進中國市場,南韓三星公司打算3月在中國推出三星支付服務。其實,不僅是手機支付,網上各種實名制也是廣受詬病,讓老百姓深惡痛絕。以人們經常使用的 實名制為例,記者發現,雖然要求實名註冊,但在 預約平台上輸入編造的姓名和身份證號碼,只要格式正確就能註冊成功,進入預約流程。多數醫院網...

伺服器執行如何確保資料安全

伺服器是網際網路企業必須用到的網路裝置,有了它企業才能夠在網上開展業務,進行宣傳。如果伺服器執行不穩定或是出現問題,就會導致企業的業務無法正常開展,也不能訪問,下面速維網路就來給大家介紹下保障伺服器安全執行的方法。伺服器安全穩定執行 1.設定複雜的密碼 很多不法分子利用第三方工具生成的密碼來破解伺服...

如何確保多執行緒已經全部執行完成

利用countdownlatch閉鎖實現。countdownlatch可以使乙個或多個執行緒等待一組事件的發生,閉鎖狀態包含乙個計數器,該計數器被初始化為乙個正數,表示需要等待事件的數量。發揮主要作用的兩個方法分別是 countdown 遞減計數器,表示乙個事件已經發生了 await 等待計數器達到...