對比同步塊和同步方法,理解一下同步塊可以力度更小的鎖定資源。在力度更小的鎖定資源時我們盡可能的提公升它的效能。
package com.sxt.syn;
/** * 執行緒安全: 在併發時保證資料的正確性、效率盡可能高
* synchronized
* 1、同步方法
* 2、同步塊
* *
*/public class synblocktest03
}class synweb12306 implements runnable catch (interruptedexception e)
test5();
} }
//執行緒安全:盡可能鎖定合理的範圍(不是指** 指資料的完整性)
//double checking雙重檢測,主要是考慮臨界值的問題
public void test5()
synchronized(this)
//模擬延時
try catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"-->"+ticketnums--);
} }//執行緒不安全 範圍太小鎖不住
public void test4()
}//模擬延時
try catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"-->"+ticketnums--);
}//執行緒不安全 ticketnums物件在變
public void test3()
//模擬延時
try catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"-->"+ticketnums--);
} }//執行緒安全 範圍太大 -->效率低下
public void test2()
//模擬延時
try catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"-->"+ticketnums--);
} }
//執行緒安全 同步
public synchronized void test1()
//模擬延時
try catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"-->"+ticketnums--);
}}
在synchronized(鎖)資源的時候,大的物件不能變,物件在變和物件的屬性在變這是兩個概念。synchronized在鎖的時候鎖的是乙個不變的物件,這個不變指的不是它的內容不變,而是指的它的位址不能變。
雙重檢測,double checking,主要是考慮臨界值的問題
後期多用synchronized塊,少用synchronized方法
多執行緒 16 併發同步
併發 同乙個物件多個執行緒同時操作,比如購買同一車次票。一定涉及到併發就會導致資料不準確問題,比如同一張票被多個人買到了,這稱為執行緒不安全。那怎麼使執行緒安全呢,比如只一台電腦,大家都想用怎麼辦,排隊。跟據演算法誰先用誰後用,保證乙個 人上來用,其他人等著,等這個人用完了下一人用,還是用乙個時間點...
同步,多執行緒 ,多執行緒方式實現併發。
io請求幾乎不佔cpu的。同步請求相當於排隊買東西,乙個卡主了,其他的都結不了賬了。執行緒並不是越多越好,如果他特別多還不如同步高,所以對執行緒要有個限制,所以就出現了執行緒池,執行緒池在python3裡才有的,python2裡沒有的。建立程序的話是耗費很多資源的,建立執行緒是幾乎不耗費資源的。建立...
併發程式設計 多執行緒(實現同步)二
當多個執行緒同時共享,同乙個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。使用多執行緒之前的同步或者使用鎖 lock 原理 將可能傳送資料衝突問題,只能讓當前乙個執行緒進行。執行完成後釋放鎖,然後讓其它執行緒執行。執行緒之前同步...