閱讀足跡 永久書架

第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頁),本章未完,點選下一頁繼續閱讀。