多執行緒賣票問題

2021-10-10 19:22:32 字數 2601 閱讀 5783

我們模擬乙個多視窗同時賣票的情景。

問題的關鍵在於兩個人不能賣出相同編號的一張票。

兩個關鍵字:

static 方法或物件一定要是靜態的

synchronized 這個是鎖的關鍵字

加了synchronized 且有static 的方法稱為類級別的鎖

加了synchronized 沒有static 的方法稱為物件級別的鎖

方法一:

package com.keafmd.day0102;

/** * keafmd

* * @classname: multithreadedticketselling01

* @description: 多執行緒賣票 類級別的鎖(方法一)

* @author: 牛哄哄的柯南

* @date: 2021-01-02 22:08

*/public

class

multithreadedticketselling01

implements

runnable

@override

public

void

run(

)catch

(interruptedexception e)}}

//類級別的鎖(方法一)

private

synchronized

static

intgetticket()

public

static

void

main

(string[

] args)

}

執行結果:

小蘭在賣票:10

柯南在賣票:9

柯南在賣票:7

小蘭在賣票:8

小蘭在賣票:6

柯南在賣票:5

柯南在賣票:4

小蘭在賣票:3

柯南在賣票:2

小蘭在賣票:1

process finished with exit code 0

方法二:

package com.keafmd.day0102;

/** * keafmd

* * @classname: multithreadedticketselling02

* @description: 多執行緒賣票 物件級別鎖(方法二)

* @author: 牛哄哄的柯南

* @date: 2021-01-02 22:25

*/public

class

multithreadedticketselling02

implements

runnable

@override

public

void

run(

)catch

(interruptedexception e)}}

//物件級別鎖(方法二)

private

intgetticket()

}public

static

void

main

(string[

] args)

}

執行結果:

柯南在賣票:10

小蘭在賣票:9

柯南在賣票:8

小蘭在賣票:7

小蘭在賣票:6

柯南在賣票:5

小蘭在賣票:3

柯南在賣票:4

小蘭在賣票:1

柯南在賣票:2

process finished with exit code 0

在執行結果裡,有可能發生3號票比4號票先賣出去,這是正常情況,我們可以將這種情形理解成柯南賣票時剩的有(4,3,2,1)所以柯南打算給顧客4號票,此時系統中4號票已被售出,但是與顧客還沒交易結束,此時小蘭在另外乙個視窗賣票,系統中剩的還有(3,2,1)所以小蘭售賣3號票,但是小蘭與顧客交易的快,所以小蘭會先把3號票賣出,只要沒有把乙個號賣兩次就是正常的。

讀完如果對你有幫助,感謝點讚支援!

如果你是電腦端,看見右下角的「一鍵三連」了嗎,沒錯點它[哈哈]

加油!

共同努力!

keafmd

———————————————分割線———————————————

多執行緒賣票

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

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

package com.llb.賣票.my 需求 某電影院目前正在上映國產大片,共有100張票,而它有3個視窗賣票,請設計乙個程式模擬該電影院賣票 思路 定義乙個類ticket實現runnable介面,裡面定義乙個成員變數 private int ticketcount 100 在ticket類中重...

賣票 多執行緒模擬賣票系統

網上搶票,方便又高效,很舒服。應用多執行緒的同步執行可以模擬很多人搶票,而且不會發生衝突。下面,我們就來利用多執行緒來模擬一把。include include include int tickets 100 定義票數為全域性變數,所以執行緒都可訪問 pthread mutex t mutex 定義互...