如果該例項是非單例物件,一般不會有執行緒安全問題. 因為每個執行緒會分別擁有不相同位址值的該物件
對某一唯一資料同時進行修改,拿使用者購買商品為例.
執行緒a: 使用者a對商品c進行下訂單操作, 過程中需要對商品庫存進行修改
執行緒b: 同時使用者b對商品c進行下訂單操作,過程中也需要對商品庫存進行修改.
類似這種對同一資料併發修改的情景,會有執行緒安全問題. 此時, 需要對使用者下訂單的相關**需要加鎖.
加鎖是有講究的,加的大了,比如如果該操作物件是單例, 以該物件為鎖;或者該物件為非單例,以該物件的class類為鎖,均是非常影響效能的. 因為絕大時候並不會有執行緒安全問題. 再次拿使用者下訂單為例, 此處可以以該商品的 id 作為鎖,既使該類執行緒安全,又極小的影響服務效能.
java中各種流的應用場景
處理二進位制位元組流 outputstream,inputstream 是介面,fileoutputstream,fileinputstream實現上述介面 bufferedinputstream,bufferedoutputstream採用了裝飾者模式,傳入fileoutputstream,fil...
js中this的應用場景
this存在於函式中,函式的呼叫方式決定了this指代的物件 1 作為物件的方法用 var obj obj.x 100 obj.y function obj.y 彈出 100 2 作為函式呼叫 var x the window function f f the window 3 作為閉包函式呼叫 v...
悲觀鎖和樂觀鎖的區別和應用場景
悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...