多個執行緒訪問同乙個資料的時候,就會操作執行緒的安全的問題,因為執行緒內部操作其實是先取值,然後修改,最後再更新記憶體中的資料。這樣由於多個執行緒的切換就會導致執行緒安全的問題,比如我們的i++就不是執行緒安全。
1.執行緒的安全的原因:由於原子性被破壞。
核心思想,對我們的資源進行加鎖,當前只能有乙個執行緒得到資源,從而保證資料原子性和安全性。
@override
public
void
run(
)private
void
demo()
}}
最好不要把synchronized用來修飾方法,因為這樣會增大他的鎖的範圍。
這裡明現可以看出兩個物件可以同時進去。
通過使用鎖,我們在物件頭中加鎖,然後只有獲取這個鎖的執行緒才能訪問被鎖的資料,
存在物件頭中的make word
進入重量級鎖且未獲得鎖的執行緒就會變成被阻塞狀態。並隨時監視鎖是否被釋放方便獲得鎖資源。
生產者:
public
class
product
implements
runnable
@override
public
void
run(
)catch
(interruptedexception e)
} system.out.
println
("生產者生產訊息");
queue.
add(
"生產訊息"
+++num)
; queue.
notify()
;}}}
}
消費者:
public
class
consumer
implements
runnable
@override
public
void
run(
)catch
(interruptedexception e)
}//消費佇列
system.out.
println
("消費者消費————"
+ queue.
remove()
);//喚醒其他執行緒
queue.
notifyall()
;}}}
}
測試**:
public
class
test
}
java高階(二) 多執行緒
即 最大限度的利用cpu資源 當某一線程的處理不需要占用cpu而只和i o等資源打交道時,讓需要占用cpu資源的其他執行緒有機會獲得cpu資源。方法一 通過繼承thread類建立執行緒 class mythread extends thread public class threadtest 方法二...
多執行緒的鎖
由於併發的問題,需要加鎖 當多個執行緒同時進行任務時,為了保證不會有多個執行緒同時對同乙個資料進行操作造成不可預料的後果,所以有了鎖的概念,我們通過鎖來使多執行緒任務更加安全。lock threading.lock cond threading.condition lock lock 多執行緒的鎖例...
c 多執行緒基礎二 鎖
執行緒之間的鎖有 互斥鎖 條件鎖 自旋鎖 讀寫鎖 遞迴鎖。一般而言,鎖的功能越強大,效能就會越低。互斥鎖用於控制多個執行緒對他們之間共享資源互斥訪問的乙個訊號量。也就是說是為了避免多個執行緒在某一時刻同時操作乙個共享資源。例如執行緒池中的有多個空閒執行緒和乙個任務佇列。任何是乙個執行緒都要使用互斥鎖...