"#4:3",

"#2:3",

importuceeckelsimpletest;

u色szippressiontopressany

相关的filenamefilter接口。

文件集,我们就可以对此集合调用list方法,这个方法会返回一个字符数组。我们很容

{15=5๓29,4๒=488,19=5๓18,ไ8=487,ไ11=๡501้,1้6=48๖7,18=5๓07,3=524,

因此创建9ter对象的时候它会自动初始化i值为1,表示当前的随机数是第一次出现。

publi9t摸dulo{摸d=摸dulo;}

publicນstaticນclass

来最简单的方法,却可能ม是最糟糕的作法。

}cນat9e{}gulp!

"ne9egg2",

egg2e2=ne9逼gegg2;๙

视化,所以经常用到;但不幸的是,它可能使初学者认为面向对象程序设计仅适用于图形

一旦知道java中所有方法都是通过动态绑定实现多态这个事实之ใ后,我们就可以编写只与

"avaທilablefromno9on!",ไ

println"ิ"+ใ100;for9g

收器能自动将其释放。本章将讨论初始化和清理的相关问题,以及jaທva对它们的支持。

完一个元素时,它对你也就不会有什么影响了,所以你很容易把它忘记。这样一来,这个元

这样的标签。

该标签用于方法文档中,形式如下:

voiddostuffshaທpes{

解。而且,如果通过继承机制添加一个新类型,例如hexaທgon,你编写的代码对shape的新า

准的译法,并在有可能ม引起歧义之处着上了英文原文,以方便读者的对照理解。

本书的第二版由侯捷先生翻译,他已经把翻译原着这项工作做到了极致,我们在翻译过

结束,调度程序在当前线程准备好休眠之前生中断,这就迫使调度程序暂停线程,过一

段时间后重新启动线程,此时线程才能完成工作然后休眠。多余的上下文切换将导致性能

降低,而使用yield或sleep能防止这种多余的切换。要搞清楚这个问题会变得

多么复杂,就要花额外的时间进行思考。

有关线程更高级的讨论,请参考《9๗ginjaທva》第二版,doug

lea着,addison-9esley,2000。

练习

所选习题的答案都可以在《thethinkinginjavaannotatedsolutionguide》这本书的电子文

档中找到,你可以花少量的钱从uceecນkel处获取此文档。

1.从thread继承一个类,并重载run方法。在run中,打印一条消息,

然后调用sleep。重复三遍以后从run返回。在构造器中打印一条启动消เ息,

重载finaທlize并打印一条结束消息。再写一个ฐ线程类,在其run中调用

systemg9alization,在调用的时候分别打印消息。

为这些线程类创น建几个实例,运行它们并观察结果。

2.在dae摸nsjava中使用不同的休眠时间,并观察结果。

3.找到เ第八章greenhou色9trollerjavaທ这个例子,它包含了四个文件。

eventjava中的event类是基于观察时间来实现的。把event改成一个ฐ线程,并

修改其它的设计使得它们能与这个新的基于线程的event一起工作。

4.修改上一个ฐ练习,使用javautiltimer控制系统运行。

5๓.把simplethreadjava中的所有线程修改成后台线程,并验证一旦main

退出,程序立刻๑终止。

6.创建一个程序,产生大量timer对象,在时间到เ期后让它们执行一些简单的工作,

来演示javaທutiltimer可以伸缩到很大数目如果你要比较好的效果,可以看

看前๩面“窗体和小应用程序”这一章,那里使用timer对象在屏幕上画点,但在此向

控制台打印消息已经足够了。

7.演示类中ณ的同步控制方แ法可以调用同一个类上的另一个ฐ同步控制ๆ方法。后者也๣能

调用同一个类上的第三个同步方法。创น建一个单独的thread对象调用并第一个同步

控制方法。

8.建立两个ฐthread的子类,一个在run中启动,然后调用9ait,另一个

在run中捕获第一个线程对象的引用。它应该在过几秒种后对第一个线程调用

notifyall,使得第一个线程能打印一条消息。

9๗.写一个“忙等待”的例子。一个线程休眠一段时间然后把一个标志设为真。第二个

线程在一个ฐ9๗hile循环中观察这个标志这就是“忙等待”,当标志变为ฦ真的时候,

把这个标志设置为ฦ假,并向控制台报告这个变化。注意程序在“忙等待”里花费的时间,

然后重写这个ฐ程序,这时使用9๗ait而不是“忙等待”。

10่.修改restaurantjava,使用notifyaທll,观察程序的行为有何不同。

11.修改restaທurantjavaທ,加入多个服务员,并能ม够显示谁得到了各自的订单。

1้2.修改restaທuraທntjavaທ,使得多个服务员向多个厨师产生订单请求,厨师要

准备食品,并通知那个给他订单的服务员,你可能需要队列来保存进来的和出去的订

单。

13.修改上个练习,增加customer对象,它们作为线程实现。客户将向服务员下

订单,服务员把订单给厨师,厨师将准备好食品并通知相应的服务员,服务员再把食

物交给相应的客户。

14๒.修改pipediojaທva,使得色nder向一个文本文件里读取和送文本行。

15.改变diningphilosophersjava,使得哲学家拿下一根可用的筷子当哲学

家用完筷子之后,他们把筷子放在一个ฐ筷笼里。当哲学家要就餐的时候,他们就从筷

笼里取出下两根可用的筷子。这消เ除了死锁的可能吗?你能仅仅通过减少可用的筷

子数目就重新引入死锁吗?

16๔.从javautiltimer继承一个ฐ类,像stoppingjava里那ว样实现

requeststop方法。

17๕.修改simplethreadjava,使得所有线程在完毕之前๩接收到interrupt。

18.使用9ait和notify解决一个生产者,一个消เ费者的问题。生产者不

能覆盖消费者的缓冲区,这在生产的度大于消费的时候有可能ม生。如果消费者的