多執行緒學習 簡單的購票程式

2022-07-19 12:24:14 字數 2458 閱讀 9549

廢話不多說,直接上**:

自定義的電影院

public

class

mycinema

//購票,引數為客戶名稱和購票數量

public

synchronized

void buyticket(string n,int

num)

else

}else

}}

自定義購買執行緒

public

class buythread implements

runnable

@override

public

void

run() catch

(interruptedexception e)

mysale.buyticket(

this.name,(int)(math.random()*2+1));//買票}

}}

測試類

public

class

test

}

測試結果:

情況1                情況2

變形金剛 開始售票,還剩10張    變形金剛 開始售票,還剩10張

客戶一 買了2張票,還剩8張     客戶一 買了1張票,還剩9張

客戶二 買了1張票,還剩7張     客戶二 買了1張票,還剩8張

客戶四 買了1張票,還剩6張     客戶四 買了2張票,還剩6張

客戶三 買了1張票,還剩5張     客戶五 買了1張票,還剩5張

客戶五 買了1張票,還剩4張     客戶三 買了2張票,還剩3張

客戶二 買了1張票,還剩3張     客戶一 買了2張票,還剩1張

客戶一 買了2張票,還剩1張     客戶五,還剩1張票,不夠購買2張,請重新購買

客戶三 買了1張票,還剩0張     客戶二,還剩1張票,不夠購買2張,請重新購買

對不起,客戶五,票已售完      客戶四 買了1張票,還剩0張

對不起,客戶四,票已售完      對不起,客戶三,票已售完

看來效果不錯,不管怎麼說他都成功了。

可是這樣寫有乙個缺點,一共是五個客戶,每個客戶買兩次,每次買一到兩張,可是一共也就10張票,也就是說,如果前面每個人都買兩張票的話,那第五次就賣光了,之後的客戶就只能傻傻的去買,然後被售票小姐告知沒票了,再抑鬱的離開,這樣顯然對他們來說很不合理。此外,如果我這裡一共不是10張票,而是20張甚至更多,則會出現賣不完的情況,這肯定是商家不願意看到的,作為賣家,一定要堅持到最後一張票賣光為止。

所以我重新修改了一下程式,新的程式中,客戶會持續買票,直到賣完為止

先是電影院:

public

class

mycinema

public

intgetrest_tickets()

//購票,引數為客戶名稱和購票數量

public

synchronized

void buyticket(string n,int

num)

else

}else

}}

然後是售票櫃檯:

public

class buythread implements

runnable

private

boolean

isticketsleft()

@override

public

void

run() catch

(interruptedexception e)

if(isticketsleft())

}system.out.println("不好意思票賣完了," + this.name + ":(先生/小姐),請下次再來");

}}

測試類:

public

class

test

}

測試結果:

變形金剛 開始售票,還剩10張

視窗四 **2張票,還剩8張

視窗一 **1張票,還剩7張

視窗二 **1張票,還剩6張

視窗三 **2張票,還剩4張

視窗五 **1張票,還剩3張

視窗四 **1張票,還剩2張

視窗三 **1張票,還剩1張

視窗二,還剩1張票,不夠**2張,請下次再來

視窗一 **1張票,還剩0張

不好意思票賣完了,視窗一:(先生/小姐),請下次再來

不好意思票賣完了,視窗五:(先生/小姐),請下次再來

不好意思票賣完了,視窗四:(先生/小姐),請下次再來

不好意思票賣完了,視窗二:(先生/小姐),請下次再來

不好意思票賣完了,視窗三:(先生/小姐),請下次再來

大概模擬出了想要的效果,有什麼不對的地方再改進。

簡單的多執行緒程式

下面是一段在windows環境下,建立多個執行緒執行程式的一段 這段 我去年就見過了,雖然挺簡單的,但是一直沒有在意,這次重新看它,希望能夠看出點不一樣的東西,平行計算一直是我乙個非常喜歡的研究方向.在自己寫的過程當中,還有乙個地方出現了乙個小小的錯誤,我想這如果不是我自己重新又寫了一遍是不會發現這...

簡單的多執行緒

多個執行緒之間是搶cpu的關係有隨機性 主線程的名字 main 子執行緒的名字 從thread 0開始命名 setname可以命名 start 方法,來開啟執行緒,繼而實現run方法的自動呼叫.手動呼叫run的時候,他失去了任務區的功能,變成了乙個普通的方法.執行緒和任務分離 哪個執行緒需要工作,就...

通過簡單的售票程式理解多執行緒

售票程式要求 1 多個視窗同時賣票 2 同一編號的票的不能多次賣出 錯誤程式解析 public class ticketdemo class ticket extends thread public void run 執行此程式,會出現同一編號的票被多次賣出,因為分別構造了三個物件,ticket都是...