程式模擬電影院視窗賣票,多執行緒Demo

2021-10-24 06:18:39 字數 2377 閱讀 3858

某電影院目前正在上映國產大片,共有100張票,而它有3個視窗賣票,請設計乙個程式模擬該電影院賣票

1. 定義乙個類sellticket實現runnable介面,裡面定義乙個成員變數:private int tickets = 100;

2. 在sellticket類中重寫run()方法實現賣票,**步驟如下:

判斷票數大於0,就賣票,並告知是哪個視窗賣的

賣了票之後,總票數要減1

票沒有了,也可能有人來問,所以這裡用死迴圈讓賣票的動作一直執行

3. 定義乙個測試類sellticketdemo,裡面有main方法,**步驟如下:

建立sellticket類的物件

建立三個thread類的物件,把sellticket物件作為構造方法的引數,並給出對應的視窗名稱

4. 啟動執行緒

package king03;

// 定義乙個類sellticket實現runnable介面,裡面定義乙個成員變數:private int tickets = 100;

public

class

sellticket

implements

runnable

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+"正在**第"

+ tickets +

"張票");

tickets--;}

}}/*// 相同的票出現了多次

while (true) catch (interruptedexception e)

// 假設執行緒按照順序醒過來

// t1搶到cpu的執行權,在控制台輸出:視窗1正在**第100張票

system.out.println(thread.currentthread().getname() + "正在**第" + tickets + "張票");

// t2搶到cpu的執行權,在控制台輸出:視窗2正在**第100張票

// t3搶到cpu的執行權,在控制台輸出:視窗3正在**第100張票

tickets--;

// 如果這三個執行緒還是按照順序來,這裡就執行了3次(--)操作,最終票就變成了97

}}*/

/*// 出現了負數的票

while (true) catch (interruptedexception e)

// 假設執行緒按照順序醒過來

// t1搶到cpu的執行權,在控制台輸出:視窗1正在**第1張票

// 假設t1繼續擁有cpu的執行權,就會執行tickets--;操作,tickets=0;

// t2搶到cpu的執行權,在控制台輸出:視窗2正在**第0張票

// 假設t2繼續擁有cpu的執行權,就會執行tickets--;操作,tickets=-1;

// t3搶到cpu的執行權,在控制台輸出:視窗3正在**第-1張票

// 假設t3繼續擁有cpu的執行權,就會執行tickets--;操作,tickets=-2;

system.out.println(thread.currentthread().getname() + "正在**第" + tickets + "張票");

tickets--;

}}*/

}}

package king03;

public

class

sellticketdemo

}

從100張一直售賣完最後一張,沒有全部截圖

最終分析是因為執行緒執行的隨機性導致的,三個執行緒先後啟動,但是都是在執行同乙個操作,造成了一張票同時在3個視窗都賣出去了。

解決辦法:使用synchronized同步**塊鎖定,使只能同時乙個執行緒執行,這樣就可以避免出現這個問題

依舊是執行緒的問題,在三個執行緒先後搶到cpu的執行權的時候,都會執行ticket--的操作,使之輸出了-1的票數,延遲之後輸出異常,鎖定執行緒之後就可以解決了

3884 NOIP2014模擬 電影院

成對成對的人生贏家要去看電影了啦!身為fff團的骨幹,你當然不能坐視不管。但為首的人生贏家小w實在太神辣,你只敢搞一些小動作。土豪小w包下了電影院的乙個包廂,其中有 n 排 m 列座位 相應的,看電影的人共有 nm 2 對。你無力阻止一對人生贏家坐在同一排 這是他們的底線 m是乙個偶數 但你可以想辦...

使用多執行緒模擬電影院買票。

模擬唐僧師徒4人買電影票。電影票10元一張,唐僧拿著一張50元的 孫悟空那和 豬八戒都拿著一張20的 沙僧拿著一張10元的。此時售票員手中只有乙個10元的。模擬他們4個人買票。package com.softeem.homework3 public class test7 class buytick...

演算法題 電影院排座

題目 輸出 1 3 2 2 3 1 思路 直接用深搜回溯即可。接下來我們用c 進行程式設計 include include include include using namespace std int n,k vector int v 存放關係差的關係對 int vis 10 標記已經排過位置的人...