阻塞執行緒與非阻塞執行緒
阿新 • • 發佈:2019-01-29
阻塞執行緒:A,B執行緒有一個公共的資源,比如說變數params,當A訪問params時,給params加鎖,而這時B要訪問params時,它只有等待A釋放params鎖時,才可以訪問;
非阻塞執行緒:A,B執行緒有一個公共的資源,比如說變數params,當A訪問params時,B也可以進行訪問操作;
上網查了一下資料,說非阻塞執行緒的效能高於阻塞執行緒,我就想是否可以使用非阻塞執行緒寫出票的程式用來提高出票速度,然後我做了簡單的測試:
測試環境:
1)64位win7系統,4g記憶體;
2)eclipse編譯器;
測試背景:
1) 票的總數為10000,分別使用非阻塞,阻塞方法編寫執行緒進行出票,然後分別開
測試結果:
1) 阻塞執行緒
主要程式碼:
執行時間:
2) 非阻塞執行緒
主要程式碼:
執行時間:
可以看出阻塞執行緒比非阻塞執行緒慢很多。
阻塞,我使用的是synchronized,非阻塞用的是cas,synchronized是悲觀鎖,而cas是樂觀鎖。
悲觀鎖:指對資料被外界修改保持保守態度,就是說在進行操作資料時,資料可能會被外界修改,所以在整個操作資料過程中,都會加上鎖;
樂觀鎖:與悲觀鎖相反,在進行操作資料的時候,不會加上鎖,而是通過版本號或者其他標誌來對資料進行對比,然後在決定是否修改資料;
所以就造成上面的結果。