根據一篇文章,精簡了一下關於執行緒同步的知識
什麼是執行緒同步,為什麼要同步
1. 執行緒同步=執行緒排隊
2. 多個執行緒訪問共享的資源才需要同步
3. 多個執行緒讀取常量不用同步,讀取變數才要同步,即涉及執行緒要要對資料修改才同步
4. 多個執行緒訪問共享資源的**有可能是同乙份**,也有可能是不同的**;無論是否執行同乙份**,只要這些執行緒的**訪問同乙份可變的共享資源,這些執行緒之間就需要同步。
如何執行緒同步
1. 給共享資源的訪問加同步鎖(注意,為什麼不是在每個物件裡新增鎖機制?沒必要,因為同步是很耗資源的)
2. 同步鎖是加在訪問共享資源的**段上的
3. 如果訪問同乙份共享資源,加的是不同的同步鎖,並不起到同步的作用,且該同步鎖沒有任何意義,也就是關鍵要判斷該鎖是否是同一同步鎖
4. 也就是說,同步鎖本身也一定是多個執行緒之間的共享物件
5. 如函式體內部產生的同步鎖,對於多執行緒不是同乙個同步鎖(具體看例子)
6. 任何乙個object reference都可以作為同步鎖
7. 是否是同乙個同步鎖,也就是看同步**間,synchronized關鍵字是否使用同乙個object reference,即同乙個記憶體位址
8. 可以使用類的static final的屬性物件作同步鎖,使用final就是為了保證引用不要改變,保證同乙個同步鎖
9. 由於同步的範圍越小越好,同步的**塊越少越好,所以不同的共享資源,要使用不同的同步鎖,即縮小同步粒度
為什麼要執行緒同步
class mythread2 implements runnable catch interruptedexception e system.out.println thread.currentthread getname 賣票,ticket this.ticket else public cla...
為什麼要執行緒同步的例子
設定全域性變數g bcontinue,在主線程中設定全域性變數g bcontinue,工作執行緒檢測該全域性變數,實現主線程控制工作執行緒的目的 列印出的g cnt1與g cnt2的數值不同,是因為執行緒除錯時時間片的切換 counterror.cpp 定義控制台應用程式的入口點。include s...
執行緒的同步
多執行緒共享資料引發的問題 用乙個簡單的例子來說,就是我們經常遇到的過年搶車票的問題,以前人們是去車站排隊,先到先得,現在隨著網際網路的發展,我們可以在網上購票了,現在我們使用多執行緒來模擬搶票過程,每個人機會一樣。關鍵 如下 執行緒不安全的網路搶票 public class site implem...