最新回答 / 小明100
Callable與 Future?兩功能是Java在后續(xù)版本中為了適應(yīng)多并法才加入的,Callable是類似于Runnable的接口,實現(xiàn)Callable接口的類和實現(xiàn)Runnable的類都是可被其他線程執(zhí)行的任務(wù)。Callable的接口定義如下;public interface Callable<V> {?? ? ? V ? call() ? throws Exception;?}?Callable和Runnable的區(qū)別如下:I ?? Callable定義的方法是call,而Runnabl...
2016-11-26
最贊回答 / Angel若夢
你的代碼有兩處錯誤1.用繼承Thread的方法實現(xiàn)多線程,需要new多個對象,這也是你在共享變量是加static的原因,所以,你使用的鎖對象this是不同的對象,所以不能實現(xiàn)線程的互斥.可以使用該類的字節(jié)碼對象Ticket.class作為鎖對象.2.如果已經(jīng)實現(xiàn)了互斥,你需要在同步代碼塊中增加一個判斷條件,用來終止程序繼續(xù)執(zhí)行,否則會出現(xiàn)打印負(fù)數(shù)的情況.因為, ?未獲得鎖的線程會在循環(huán)內(nèi)等待,當(dāng)一條線程將tickets--到0的時候,其他等待的線程獲得鎖以后會繼續(xù)執(zhí)行后續(xù)代碼,導(dǎo)致運行結(jié)果不準(zhǔn)確.
2016-03-13
最新回答 / 飄游人
extends Thread的例子沒有問題。想實現(xiàn)的確實是3個窗口總共有5張票,老師故意用extends Thread的例子,就是為了說明這種方式達(dá)不到希望的效果(即實際出現(xiàn)的效果是你所說的“每個窗口擁有5張票”)。老師也在PPT中寫明,只有Runnable的方式才適合多個線程處理同一資源的情況。如果硬要用extends Thread來實現(xiàn)效果,確實像你說的可以加static關(guān)鍵字,但老師想告訴我們的是,對于這樣的情況,還是用Runnable好。
2016-02-16
最贊回答 / sxian_wang
你的理解大致上是對的,但不是剛好打印的時候被窗口2減去一張票,過程是這樣的:當(dāng)?shù)谝粋€線程獲得CPU的時間片后,它的代碼恰好執(zhí)行到println那一行后,剛準(zhǔn)備輸出(但還沒有獲得tickets的值),這時候該線程的時間片被剝奪,等待下一次再獲得時間片。等到別的線程執(zhí)行完后,該線程再次獲得時間片,它去訪問tickets變量,應(yīng)該tickets變量是被別的線程自減過得,所以獲得不是4,而是一個比4小的值。由于這種運算在現(xiàn)在的CPU上很快,就會出現(xiàn)前三個都是2的情況。如果你給println語句加上一個synchr...
2015-12-19
最新回答 / good_2016
If you see the additional message "Unable to attach to 32-bit process running under WOW64",
? ?your application is running with 32bit Java while using 64bit Eclipse on Windows.
? ?Either using 64bit Java for your application or using 32bit Eclipse solv...
2015-12-02
最贊回答 / 哀幻暝
在這里一共有兩個線程①.守護(hù)線程 ?②主線程(main) ?老師說的:若沒有線程需要守護(hù)線程“守護(hù)”,那么守護(hù)線程就會退出程序運行之后兩條線程都在執(zhí)行:②線程再啟動了①線程然后 繼續(xù)執(zhí)行到sc.next()語句 等待鍵盤輸入①線程在啟動之后就不停的寫東西到文件中。如果在這之后的過程中,程序員在鍵盤中輸入的任意字符,毀導(dǎo)致②繼續(xù)執(zhí)行,然后②就執(zhí)行完啦,你看main方法中就那幾行代碼,全都執(zhí)行完啦! 然后主線程就退出啦! 然后①線程就沒有線程可以守護(hù)啦,自己也就退出啦!
2015-11-11