多執行緒經典問題 賣票問題

2021-10-14 16:25:35 字數 2313 閱讀 9449

package com.llb.賣票.my;

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

* 思路:

* ① 定義乙個類ticket實現runnable介面,裡面定義乙個成員變數:private int ticketcount = 100;

* ② 在ticket類中重寫run()方法實現賣票,**步驟如下

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

* b:票數要減1 c:賣光之後,執行緒停止

* ③ 定義乙個測試類ticketdemo,裡面有main方法,**步驟如下

* a:建立ticket類的物件

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

* c:啟動執行緒

*/public

class

ticket

extends

thread

catch

(interruptedexception e)

ticketcount--

; system.out.

println

(thread.

currentthread()

.getname()

+"在賣"

+(ticketcount+1)

+"號票,還剩"

+ticketcount+

"張票");

}else}}

}}

package com.llb.賣票.my;

public

class

ticketdemo

}

package com.llb.賣票.my.同步方法;

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

* 思路:

* ① 定義乙個類ticket實現runnable介面,裡面定義乙個成員變數:private int ticketcount = 100;

* ② 在ticket類中重寫run()方法實現賣票,**步驟如下

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

* b:票數要減1 c:賣光之後,執行緒停止

* ③ 定義乙個測試類ticketdemo,裡面有main方法,**步驟如下

* a:建立ticket類的物件

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

* c:啟動執行緒

*/public

class

ticket

implements

runnable

}// 同步方法

// 同步鎖是this

private

synchronized

void

method()

catch

(interruptedexception e)

ticket--

; system.out.

println

(thread.

currentthread()

.getname()

+"在賣"

+(ticket+1)

+"號票,還剩"

+ticket+

"張票");

}}// 同步方法

//同步鎖是ticket.class,當前類的位元組碼物件

private

static

synchronized

void

method2()

catch

(interruptedexception e)

ticket--

; system.out.

println

(thread.

currentthread()

.getname()

+"在賣"

+(ticket+1)

+"號票,還剩"

+ticket+

"張票");

}}}

package com.llb.賣票.my.同步方法;

import com.llb.賣票.my.ticket;

public

class

ticketdemo

}

多執行緒賣票問題

我們模擬乙個多視窗同時賣票的情景。問題的關鍵在於兩個人不能賣出相同編號的一張票。兩個關鍵字 static 方法或物件一定要是靜態的 synchronized 這個是鎖的關鍵字 加了synchronized 且有static 的方法稱為類級別的鎖 加了synchronized 沒有static 的方法...

多執行緒賣票

前置條件 設定總票數 比如20張 開啟多個售票視窗同時進行火車票的售賣 這裡多個視窗代表 多執行緒.代表啟動了多少個執行緒物件 怎麼賣票 借助迴圈 重複賣票動作 使用 while死迴圈 每賣出1張 總票數 操作 什麼時候退出迴圈?發現賣完了,退出迴圈 開啟執行緒 執行 run方法內部邏輯 單執行緒賣...

多執行緒系列1 經典賣票

1.賣票的方法 class ticketrest 未加鎖 public void sellticketnolock int num 售票員 售出第號車票,剩餘張 ticket task.delay 200 加鎖 public void sellticketaddlock int num 售票員 售出...