Java多執行緒模擬賣票的問題及解釋

2021-09-13 21:14:15 字數 1483 閱讀 5094

建立執行緒常用的兩種方式,一是實現runnable介面,二是繼承thread類,都需要重寫run()方法。

第一種繼承thread類

public

class

testthread

extends

thread

@override

public

void

run(

)else

catch

(interruptedexception e)}}

}}public

static

void

main

(string[

] args) throws exception

}

輸出如下:

第二種實現runnable介面

public

class

testrunnable

implements

runnable

catch

(interruptedexception e)

string msg = thread.

currentthread()

.getname()

+" 售出第 "

+(no - total)

+" 張票"

; system.out.

println

(msg)

; total--;}

else}}

}public

static

void

main

(string[

] args)

}

輸出如下:

這裡解釋一下為什麼在實現runnable介面時,可以使用 synchronized (this),而在繼承thread中必須宣告靜態成員來作為鎖的物件。當兩個併發執行緒訪問同乙個物件object中的這個synchronized(this)同步**塊時,乙個時間內只能有乙個執行緒得到執行。另乙個執行緒必須等待當前執行緒執行完這個**塊以後才能執行該**塊。換句話說,在實現runnable介面時,this指代的是當前類的物件,上文中的std是testrunnable 的例項物件,在建立多個執行緒的時候,這些執行緒公用乙個鎖的物件(std),所以就可以實現同步。而在繼承thread類中,testthread 建立了4個執行緒來模擬視窗,如果用this,系統會認為哪個執行緒訪問,對應執行緒的testthread的例項就作為鎖的物件,導致了會產生4個鎖的物件,因此同步失敗。所以在要用static修飾乙個物件, 來保證鎖的物件唯一性。

Java 多執行緒模擬賣票示例

使用runnable介面建立三個子執行緒並起名為a,b,c模擬實現賣票操作,觀察結果。class mythread implements runnable塊 override public void run 方法2 sychronized方法 演算法 題目 海灘上有一堆桃子,五隻猴子來分。第一只猴子...

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

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

Java 多執行緒賣票

在實際應用中,我們經常用到多執行緒,如車站的售票系統,車站的各個售票口相當於各個執行緒。當我們做這個系統的時候可能會想到兩種方式來實現,繼承thread類或實現runnable介面,現在看一下這兩種方式實現的兩種結果。class mythread extends thread public void...