1. 程式人生 > >阻塞執行緒與非阻塞執行緒

阻塞執行緒與非阻塞執行緒

阻塞執行緒:AB執行緒有一個公共的資源,比如說變數params,當A訪問params時,給params加鎖,而這時B要訪問params時,它只有等待A釋放params鎖時,才可以訪問;

非阻塞執行緒:AB執行緒有一個公共的資源,比如說變數params,當A訪問params時,B也可以進行訪問操作;

上網查了一下資料,說非阻塞執行緒的效能高於阻塞執行緒,我就想是否可以使用非阻塞執行緒寫出票的程式用來提高出票速度,然後我做了簡單的測試:

測試環境:

164win7系統,4g記憶體;

 2eclipse編譯器;

測試背景:

1)  票的總數為10000,分別使用非阻塞,阻塞方法編寫執行緒進行出票,然後分別開

100個執行緒去跑,計算當票的數量為0時,所使用的時間;

測試結果:

1)  阻塞執行緒

主要程式碼:


執行時間:


2)  非阻塞執行緒

主要程式碼:

執行時間:


可以看出阻塞執行緒比非阻塞執行緒慢很多。

阻塞,我使用的是synchronized,非阻塞用的是cassynchronized是悲觀鎖,而cas是樂觀鎖。

悲觀鎖:指對資料被外界修改保持保守態度,就是說在進行操作資料時,資料可能會被外界修改,所以在整個操作資料過程中,都會加上鎖;

樂觀鎖:與悲觀鎖相反,在進行操作資料的時候,不會加上鎖,而是通過版本號或者其他標誌來對資料進行對比,然後在決定是否修改資料;

所以就造成上面的結果。