在多線程中,有一個經典的例子:售票
售票很常見,公園,車站,電影院,都有售票系統,通常這些售票的地方,都開放着不止一個售票窗口。這就涉及到了多線程的概念了。
接下來看看這個例子:
既然線程有兩種方式,我們就分別看看這兩種方式寫出來的程序和運行之後的結果是咋樣的?
先來看看繼承Thread的方式:
線程類:
運行及其結果:
先別管怎麼樣,先來看看Runnable方式實現出來的是咋樣的?
Runnable方式:
Runnable類:
運行及其結果:
現在先來看看兩種方式得到的結果,總票數同樣是5張,也同樣是開兩個線程去售票。
看第一種繼承Thread類的方式,打印出來總共有10條數據,也就是說,兩個線程分別售票,互不相關。一張票被售出了兩次。
而第二種方式:打印出來總共有5條數據,兩個線程同時售票,總共售出5張票,也就是說兩個線程同時首同一個票池內的票。一張票只售一次。
結果看完了,很明顯,第二種方式纔是我們想要的,第一種明顯不符合,一張票被售了兩次,想想,如果一輛班車上的一個座位的一張票被賣了兩次,上車的時候來了兩個人,會咋樣?很可怕。對吧。
所以,也就可以得到我們上一節裏面說的,實現Runnable方式,可以實現數據的共享。也提高了代碼的健壯性。
<偷偷的告訴你們,當你把Thread類中的票的總數定義爲靜態(static)的時候,也是可以實現的,嘿嘿>
線程篇: