(九)Java入門 多執行緒(2)安全問題

2021-08-15 16:29:08 字數 1212 閱讀 2307

1、多個執行緒在操作共享的資料。

2、操作共享資料的**有多條。

總之,多個執行緒同時執行操作共享資料多行**。

(1)解決思想:就是將多條操作共享資料的**封裝起來。當乙個執行緒處理這些封裝**,其他執行緒不得參與運算,必須當前執行緒執行完之後,才可以執行其他的執行緒。

(2)同步**塊格式

//所謂的物件鎖,將這段**鎖住,同一時間,只有乙個執行緒在處理。類似於火車的衛生間。。。。

synchronized(物件)  //必須有乙個物件  

(3)同步的前提:

同步中必須有多個執行緒並且使用同乙個物件鎖。

(4)同步的弊端

相對以前效率低,因為同步外的執行緒都會判斷同步鎖。(物件鎖住後,其他執行緒也會取得執行權,並會不斷判斷同步鎖的狀態)。

(1)方法:直接在函式名前加上修飾符synchronized。

(2)同步函式的鎖:就是this

(1)同步函式和同步**塊區別:同步函式鎖是固定this,同步**塊鎖是任意的物件。

(2)靜態同步函式的鎖:該函式所屬位元組碼檔案物件,可以用this.getclass()方法獲取,也可以用類名.class表示。

1、產生的原因:同步鎖的巢狀是導致死鎖的原因之一。

2、死鎖**分析:自己寫乙個死鎖**。(證明你確實是懂死鎖了)。

//死鎖示例

public

class

deadlock

implements

runnable

public

void

run() }}

} else }}

}}

}class lockab

class deadtest

}

分析:有兩個鎖a和b,執行緒0需要通過a鎖、b鎖去接觸內容,執行緒1需要通過b鎖、a鎖去接觸內容,但是如果執行緒0在a鎖和b鎖之間時、執行緒1在b鎖和a鎖之間時,就導致了死鎖。因為執行緒0手裡拿著a鎖,執行緒1手裡拿著b鎖,互相不給、互相競爭。

Java多執行緒4 安全問題

這樣的執行機制就可能會導致多執行緒的安全問題 1.多個執行緒操作共享資料 2.在乙個執行緒中有多行 操作共享資料 改變共享資料 解決思路 乙個執行緒在執行執行緒任務的時候將多條操作共享資料的 一起執行,在執行過程中不允許其他執行緒執行 體現 package thread class tickets ...

多執行緒安全問題

這裡的安全問題可以理解為 實現在邏輯上的問題,比如 火車站賣票 100張票讓4個人去賣,一定不能出現賣的票是負數問題,那麼開啟多執行緒後,如何才能保證賣的票不可能存在負數呢?常用的解決方法有兩種 1,使用同步 塊,把需要同步的 再放同步 塊中 2,使用同步函式 同步的鎖,可以理解為就是那個物件!同步...

Java 多執行緒存在的安全問題

存在的問題 當num 1時,假如執行緒t1此時拿到cpu,執行任務 在判斷if語句條件剛剛結束時,也就是還沒來得及執行輸出語句,cpu被t2搶走了,此時num依然等於1,那麼if條件通過,在執行過程中,依然可能被其他執行緒搶走cpu而進入阻塞狀態,最後有可能賣出0,1,2這種票,這就是多執行緒存在的...