多執行緒 併發 同步

2021-09-11 05:16:49 字數 1633 閱讀 6787

對比同步塊和同步方法,理解一下同步塊可以力度更小的鎖定資源。在力度更小的鎖定資源時我們盡可能的提公升它的效能。

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 原理 將可能傳送資料衝突問題,只能讓當前乙個執行緒進行。執行完成後釋放鎖,然後讓其它執行緒執行。執行緒之前同步...