某電影院目前正在上映國產大片,共有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 標記已經排過位置的人...