第8部分 (第1/2頁)
套牢提示您:看後求收藏(筆趣閣小說www.biqugexsw.tw),接著再看更方便。
注意:這並沒有消滅這個執行緒,但它停止了執行緒的執行。並且這個執行緒不能用t1。start()重新啟動。在我們的例子裡,我們從來不用顯式地停止一個執行緒。我們只簡單地讓它執行完而已。很多複雜的執行緒例子將需要我們控制每一個執行緒。在這種情況下會使用到stop()函式。如果需要,你可以測試你的執行緒是否被啟用。一個執行緒已經啟動而且沒有停止被認為是啟用的。t1。isAlive()如果t1是啟用的,這個函式將返回true。
7。2。7動畫例子
下面是一個包含動畫執行緒的applet例子:
importjava。awt。*;importjava。awt。image。ImageProducer;import
java。applet。Applet;
publicclassatest3extendsAppletimplementsRunnable{Imageimages'';
MediaTrackertracker;intindex=0;Threadanimator;
intmaxWidth;maxHeight;//Ouroff…screenponentsfordoublebuffering。
ImageoffScrImage;GraphicsoffScrGC;
//Canwepaintyes?booleanloaded=false;
//Initializetheapplet。Setoursizeandloadtheimagespublicvoidinit()
'//Setupourimagemonitortracker=newMediaTracker(this);
//SetthesizeandwidthofourappletmaxWidth=100;maxHeight=100;
images=newImage'10';//Setupthedouble…bufferandresizeourapplet
try{offScrImage=createImage(maxWidth;maxHeight);offScrGC=
offScrImage。getGraphics();offScrGC。setColor(Color。lightGray);
offScrGC。fillRect(0;0;maxWidth;maxHeight);
resize(maxWidth;maxHeight);}catch(Exceptione)
{e。printStackTrace();}
//loadtheanimationimagesintoanarrayfor(inti=0;i=images。length){index=0;}}
//Delayheresoanimationlooksnormaltry{animator。sleep(200);}catch
(InterruptedExceptione){}//Drawthenextframerepaint();}}}
7。3多執行緒間的通訊
7。3。1生產者和消費者
多執行緒的一個重要特點是它們?reg;間可以互相通訊。你可以設計執行緒使用公用物件,每個執行緒都可以獨立操作公用物件。典型的執行緒間通訊建立在生產者和消費者模型上:一個執行緒產生輸出;另一個執行緒使用輸入buffer
讓我們建立一個簡單的”AlphabetSoup”生產者和相應的消費者。
7。3。2生產者
生產者將從thread類裡派生:classProducerextendsThread
{privateSoupsoup;privateStringalphabet=”
ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
publicProducer(Soups){//Keepourowncopyofthesharedobjectsoup
=s;}
《java語言入門問題》 第8部分(第1/2頁),本章未完,點選下一頁繼續閱讀。