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
staic變量 數(shù)據(jù)在任何地方更改都會(huì)變化,只要程序還在運(yùn)行,變量沒被銷毀的情況下。
2017-05-07
什么叫創(chuàng)建線程的兩種方式……把線程(對(duì)應(yīng)Thread類實(shí)例)和任務(wù)(Runnable接口實(shí)例)區(qū)分開來好吧!啟動(dòng)一個(gè)線程去執(zhí)行任務(wù)的過程包括
創(chuàng)建任務(wù)-》創(chuàng)建線程-》將任務(wù)指定為線程的目標(biāo)(target)-》啟動(dòng)線程(調(diào)用start())來執(zhí)行任務(wù),
這其中涉及了線程(任務(wù)執(zhí)行者)和任務(wù)兩類實(shí)體,照這里說的創(chuàng)建線程的方式就只有實(shí)例化一個(gè)Thread類對(duì)象一種!
只不過Thread類本身就實(shí)現(xiàn)了Runnable接口因此其自身也可以充當(dāng)一個(gè)任務(wù)。用繼承的方式跑的任務(wù)還不是一樣對(duì)應(yīng)Runnable實(shí)例
創(chuàng)建任務(wù)-》創(chuàng)建線程-》將任務(wù)指定為線程的目標(biāo)(target)-》啟動(dòng)線程(調(diào)用start())來執(zhí)行任務(wù),
這其中涉及了線程(任務(wù)執(zhí)行者)和任務(wù)兩類實(shí)體,照這里說的創(chuàng)建線程的方式就只有實(shí)例化一個(gè)Thread類對(duì)象一種!
只不過Thread類本身就實(shí)現(xiàn)了Runnable接口因此其自身也可以充當(dāng)一個(gè)任務(wù)。用繼承的方式跑的任務(wù)還不是一樣對(duì)應(yīng)Runnable實(shí)例
2017-04-25
贊,比那什么深入淺出多線程清晰多了。深入淺出多線程那個(gè)自己YY的場(chǎng)景真心莫名其妙,毫無實(shí)用性和代表性
2017-04-15
MyThread mt = new MyThread("火車站窗口");
Thread mt1 = new Thread(mt,"窗口一");
Thread mt2 = new Thread(mt,"窗口二");
Thread mt3 = new Thread(mt,"窗口三");
mt1.start();
mt2.start();
mt3.start();
這樣就不會(huì)多賣了
Thread mt1 = new Thread(mt,"窗口一");
Thread mt2 = new Thread(mt,"窗口二");
Thread mt3 = new Thread(mt,"窗口三");
mt1.start();
mt2.start();
mt3.start();
這樣就不會(huì)多賣了
2017-03-21
每個(gè)老師都有不同的講課風(fēng)格,而且講課的內(nèi)容、難易、方式都不一樣,老師只是教授知識(shí),學(xué)的怎么樣還是要看自己的努力。
2017-03-20