多執行緒(多執行緒的安全問題)

2022-09-10 03:57:14 字數 791 閱讀 7053

多執行緒的執行出現安全問題。(非常可怕的問題,一出問題比較惱火)

問題原因:(重點)

當多條語句在操作同乙個執行緒共享資料時,乙個執行緒對多條語句只執行了一部分,還沒執行完,另乙個執行緒參與進來執行。導致共享資料的錯誤。

解決方法:對多條操作共享資料的語句,只能讓乙個執行緒都執行完,在執行過程中,其他執行緒不可以參與執行

j**a對於執行緒的安全問題提供了專業的解決方式。

就是同步**塊:

synchronized(物件) //物件:不管什麼物件都可以 通常:object obj=new object();

物件如同鎖。持有鎖的執行緒可以在同步中執行

沒有持有鎖的執行緒即使獲取cpu的執行權,也進不去,因為沒有獲取鎖。

現實中的例子:火車上的衛生間--經典

同步的前提:

1、必須要有兩個或者兩個以上的執行緒

2、必須是多個執行緒使用同一把鎖

必須保證同步中只能有乙個執行緒在執行

好處:解決多執行緒的安全問題

弊端:多個執行緒都需要判斷鎖,較為消耗資源

class ticket implements runnable  catch (interruptedexception e) 

返回當前正在執行的執行緒物件的引用 返回值為:thread-x

system.out.println(thread.currentthread().getname() + "....sale:" + tick--);}}

}}}public class ticketdemo02

}

多執行緒二 多執行緒安全問題

當多個執行緒共享同乙個全域性或者靜態變數,做寫的操作,可能會發生資料衝突問題,也就是執行緒安全問題。讀操作和區域性變數是不會發生的。二 執行緒安全的解決方法 該資源只能讓當前執行緒操作,操作完成之後,再讓其他執行緒執行 多執行緒之間同步 synchronized 使用鎖 lock 語法 synchr...

多執行緒安全問題

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

多執行緒的安全問題

首先先提出幾個問題 1.多執行緒程式設計何時會出現執行緒不安全的問題?2.如何解決執行緒不安全的問題?執行緒不安全的本質是多執行緒共享資料,那麼什麼情況下多執行緒會共享資料?無外乎這麼幾種情況 1 多執行緒訪問單例項中的例項變數 2 多執行緒訪問靜態變數 下面將舉例說明,這個例子模擬鐵路售票系統,實...