當多個執行緒共享同乙個全域性或者靜態變數,做寫的操作,可能會發生資料衝突問題,也就是執行緒安全問題。讀操作和區域性變數是不會發生的。
二、執行緒安全的解決方法:該資源只能讓當前執行緒操作,操作完成之後,再讓其他執行緒執行
多執行緒之間同步: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...