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

2021-08-26 12:04:23 字數 1280 閱讀 7943

當多個執行緒共享同乙個全域性或者靜態變數,做寫的操作,可能會發生資料衝突問題,也就是執行緒安全問題。讀操作和區域性變數是不會發生的。

二、執行緒安全的解決方法:該資源只能讓當前執行緒操作,操作完成之後,再讓其他執行緒執行

多執行緒之間同步:synchronized

使用鎖:lock

語法:

synchronized(obj)
例項**

public void sale() 

}}

同步方法,被synchronized修飾的方法,這種形式不用顯示指定鎖,因為this就是鎖。比如兩個執行緒同時操作乙個物件,那麼就要在(該物件對應的類中)需同步的地方加鎖

**例項

public synchronized void sale()  catch (exception e) 

system.out.println(thread.currentthread().getname() + ",** 第" + (100 - traincount + 1) + "張票.");

traincount--;

}}

當出現執行緒安全問題的時候。

當兩個執行緒,互相等待對方釋放鎖(至少兩把鎖)時,就會發生死鎖。

**例項:

/** 

* 乙個簡單的死鎖類

* 當deadlock類的物件flag==1時(td1),先鎖定o1,睡眠500毫秒

* 而td1在睡眠的時候另乙個flag==0的物件(td2)執行緒啟動,先鎖定o2,睡眠500毫秒

* td1睡眠結束後需要鎖定o2才能繼續執行,而此時o2已被td2鎖定;

* td2睡眠結束後需要鎖定o1才能繼續執行,而此時o1已被td1鎖定;

* td1、td2相互等待,都需要得到對方鎖定的資源才能繼續執行,從而死鎖。

*/ public class deadlock implements runnable catch (exception e)

synchronized (o2)

} }

if (flag == 0) catch (exception e)

synchronized (o1)

} }

} public static void main(string args)

}

多執行緒程式設計要確保併發程式正確地執行,必須要保證原子性、可見性以及有序性,缺一不可,不然就可能導致結果執行不正確。

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

多執行緒的執行出現安全問題。非常可怕的問題,一出問題比較惱火 問題原因 重點 當多條語句在操作同乙個執行緒共享資料時,乙個執行緒對多條語句只執行了一部分,還沒執行完,另乙個執行緒參與進來執行。導致共享資料的錯誤。解決方法 對多條操作共享資料的語句,只能讓乙個執行緒都執行完,在執行過程中,其他執行緒不...

多執行緒安全問題

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

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

講到執行緒安全 enn。怎麼說呢 這是乙個很複雜的東西 算了直接上 吧 文章中 有些我也是複製的不過我不像別人看都不看 我都看過一邊覺得對的我才會複製 public class securitythead public static void main string args catch inter...