加不加static沒(méi)關(guān)系。這涉及到共享變量線程之間共享問(wèn)題。需要synchronize或其他方式來(lái)解決
2017-06-26
Java線程分為兩類:①用戶線程:運(yùn)行在前臺(tái),執(zhí)行具體任務(wù)(如:程序的main線程)。
②守護(hù)線程:運(yùn)行在后臺(tái),為其他前臺(tái)線程服務(wù)。特點(diǎn):一旦所有用戶線程都結(jié)束運(yùn)行,守護(hù)線程會(huì)隨JVM一起結(jié)束工作。(垃圾回收線程)
設(shè)置守護(hù)線程:可以通過(guò)調(diào)用Thread類的setDaemon(true)方法來(lái)設(shè)置當(dāng)前線程為守護(hù)線程。
注意:①setDaemon(true)必須在start()方法之前調(diào)用,否則會(huì)拋出IllegalThreadStateException異常。
②在守護(hù)線程中產(chǎn)生的新線程也是守護(hù)線程。
③不是所有的任務(wù)都可以分給守護(hù)線程來(lái)執(zhí)行,例如讀寫操作、計(jì)算邏輯。
②守護(hù)線程:運(yùn)行在后臺(tái),為其他前臺(tái)線程服務(wù)。特點(diǎn):一旦所有用戶線程都結(jié)束運(yùn)行,守護(hù)線程會(huì)隨JVM一起結(jié)束工作。(垃圾回收線程)
設(shè)置守護(hù)線程:可以通過(guò)調(diào)用Thread類的setDaemon(true)方法來(lái)設(shè)置當(dāng)前線程為守護(hù)線程。
注意:①setDaemon(true)必須在start()方法之前調(diào)用,否則會(huì)拋出IllegalThreadStateException異常。
②在守護(hù)線程中產(chǎn)生的新線程也是守護(hù)線程。
③不是所有的任務(wù)都可以分給守護(hù)線程來(lái)執(zhí)行,例如讀寫操作、計(jì)算邏輯。
2017-06-19
這樣就可以完美輸出:
剩余車票:4 出售于thread---1 此線程共銷售1張
剩余車票:3 出售于thread---3 此線程共銷售1張
剩余車票:2 出售于thread---2 此線程共銷售1張
剩余車票:1 出售于thread---1 此線程共銷售2張
剩余車票:0 出售于thread---3 此線程共銷售2張
這樣的反饋了
剩余車票:4 出售于thread---1 此線程共銷售1張
剩余車票:3 出售于thread---3 此線程共銷售1張
剩余車票:2 出售于thread---2 此線程共銷售1張
剩余車票:1 出售于thread---1 此線程共銷售2張
剩余車票:0 出售于thread---3 此線程共銷售2張
這樣的反饋了
2017-06-10
public void run() {
int i = 0;
while(true){
synchronized(this){
if(piao>0){
piao--;
i++;
System.err.println("剩余車票:"+piao+" "+"出售于"+Thread.currentThread().getName()+" "+"此線程共銷售"+i+"張");}else{break;}}}}
int i = 0;
while(true){
synchronized(this){
if(piao>0){
piao--;
i++;
System.err.println("剩余車票:"+piao+" "+"出售于"+Thread.currentThread().getName()+" "+"此線程共銷售"+i+"張");}else{break;}}}}
2017-06-10
synchronized的用法也不宜跟while(tickets>0)需要while(true)你們自己理解下,完整代碼如下:
2017-06-10
能不能別動(dòng)不動(dòng)就嫌棄老師的聲音或者說(shuō)話方式?你自己的聲音到底有多好聽(tīng)說(shuō)話方式有多man???
2017-05-23