1. 程式人生 > >Java_執行緒—經典的例子:售票

Java_執行緒—經典的例子:售票

在多執行緒中,有一個經典的例子:售票

售票很常見,公園,車站,電影院,都有售票系統,通常這些售票的地方,都開放著不止一個售票視窗。這就涉及到了多執行緒的概念了。

接下來看看這個例子:

既然執行緒有兩種方式,我們就分別看看這兩種方式寫出來的程式和執行之後的結果是咋樣的?

先來看看繼承Thread的方式:

執行緒類:


執行及其結果:


先別管怎麼樣,先來看看Runnable方式實現出來的是咋樣的?

Runnable方式:

Runnable類:


執行及其結果:


現在先來看看兩種方式得到的結果,總票數同樣是5張,也同樣是開兩個執行緒去售票。

看第一種繼承Thread類的方式,打印出來總共有10條資料,也就是說,兩個執行緒分別售票,互不相關。一張票被售出了兩次。

而第二種方式:打印出來總共有5條資料,兩個執行緒同時售票,總共售出5張票,也就是說兩個執行緒同時首同一個票池內的票。一張票只售一次。

結果看完了,很明顯,第二種方式才是我們想要的,第一種明顯不符合,一張票被售了兩次,想想,如果一輛班車上的一個座位的一張票被賣了兩次,上車的時候來了兩個人,會咋樣?很可怕。對吧。

所以,也就可以得到我們上一節裡面說的,實現Runnable方式,可以實現資料的共享。也提高了程式碼的健壯性。

<偷偷的告訴你們,當你把Thread類中的票的總數定義為靜態(static)的時候,也是可以實現的,嘿嘿>

執行緒篇: