友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

Java语言入门-第8部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!

注意:这并没有消灭这个线程,但它停止了线程的执行。并且这个线程不能用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;}
publicvoidrun(){charc;//Throw10lettersintothesoupfor(int
i=0;ijavaMultiCatcha=0divby0:java。lang。arithmeticexception:/by
zeroC:》javaMutiCatch1a=1arrayindexoob:
java。lang。ArrayIndexOutOfBoundsException:42
8。6try语句的嵌套
你可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部,写另一个try语句保护其他代码。每当遇到一个try语句,”异常”的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种”异常”进行处理,堆栈就会展开,直到遇到有处理这种”异常”的try语句。下面是一个try语句嵌套的例子。
classMultiNest{staticvoidprocedure(){try{intc''={1}:c'42'
=99;}catch(ArrayIndexOutOfBoundsexceptione)
{System。out。println(”arrayindexoob:”+e);}}publicstaticvoid
main(Stringargs''){try{inta=args。length;system。out。println(”a
=”+a);int
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!