為什麼要執行緒同步

2021-10-05 05:50:45 字數 819 閱讀 2015

class mythread2 implements runnable catch (interruptedexception e) 

system.out.println(thread.currentthread().getname()+"+賣票,ticket="+this.ticket--);

}else

} }}public class threaddemo1

}

票販子c+賣票,ticket=9

票販子b+賣票,ticket=8

票販子a+賣票,ticket=10

票販子c+賣票,ticket=7

票販子a+賣票,ticket=6

票販子b+賣票,ticket=5

票販子c+賣票,ticket=4

票販子b+賣票,ticket=3

票販子a+賣票,ticket=2

票販子c+賣票,ticket=1

*******票已被搶光*******

票販子b+賣票,ticket=0

*******票已被搶光*******

票販子a+賣票,ticket=-1

*******票已被搶光*******

可以看到票數有為負數的情況。

分析:當只剩最後一張票的時候,a去買票了,首先判斷this.ticket>0成立,然後sleep(100)了,沒有執行ticket–,在a sleep的時候b來了,由於a的操作還沒有執行到ticket–,b判斷this.ticket>0也成立,然後b也sleep了,c同理,asleep時間到了,把票取走了,b和c醒了,沒票了。

為什麼要執行緒同步的例子

設定全域性變數g bcontinue,在主線程中設定全域性變數g bcontinue,工作執行緒檢測該全域性變數,實現主線程控制工作執行緒的目的 列印出的g cnt1與g cnt2的數值不同,是因為執行緒除錯時時間片的切換 counterror.cpp 定義控制台應用程式的入口點。include s...

為什麼要建立執行緒池

在有些工作場景中,比如說伺服器程式設計中,如果為每乙個客戶都分配乙個新的工作執行緒,並且當工作執行緒與客戶通訊結束時,這個執行緒被銷毀,這就需要頻繁的切換工作執行緒,這會帶來一些負擔,最主要的是系統大的開銷和系統資源不足問題。首先,伺服器建立和銷毀工作執行緒的開銷很大,如果伺服器與很多客戶端通訊,並...

Windows為什麼要支援執行緒

windows為什麼要支援執行緒,程序與執行緒的聯絡與區別是什麼?在計算機的早期歲月,作業系統沒有提供執行緒概念。事實上整個系統只執行著乙個執行執行緒,其中同時包含作業系統 和應用程式。只用乙個執行執行緒的問題在於,長時間執行的任務會阻止其他任務執行。例如,在16位windows的那些日子,列印乙個...