"#4:3",
"#2:3",
importuceeckelsimpletest;
u色szippressiontopressany
相关的filenamefilter接口。
文件集,我们就可以对此集合调用list方法,这个方法会返回一个字符数组。我们很容
{15=5๓29,4๒=488,19=5๓18,ไ8=487,ไ11=501้,1้6=48๖7,18=5๓07,3=524,
因此创建9ter对象的时候它会自动初始化i值为1,表示当前的随机数是第一次出现。
publi9t摸dulo{摸d=摸dulo;}
publicນstaticນclass
来最简单的方法,却可能ม是最糟糕的作法。
}cນat9e{}gulp!
"ne9egg2",
egg2e2=ne9逼gegg2;๙
视化,所以经常用到;但不幸的是,它可能使初学者认为面向对象程序设计仅适用于图形
一旦知道java中所有方法都是通过动态绑定实现多态这个事实之ใ后,我们就可以编写只与
"avaທilablefromno9on!",ไ
println"ิ"+ใ100;for9g
收器能自动将其释放。本章将讨论初始化和清理的相关问题,以及jaທva对它们的支持。
完一个元素时,它对你也就不会有什么影响了,所以你很容易把它忘记。这样一来,这个元
这样的标签。
该标签用于方法文档中,形式如下:
voiddostuffshaທpes{
解。而且,如果通过继承机制添加一个新类型,例如hexaທgon,你编写的代码对shape的新า
准的译法,并在有可能ม引起歧义之处着上了英文原文,以方便读者的对照理解。
本书的第二版由侯捷先生翻译,他已经把翻译原着这项工作做到了极致,我们在翻译过
结束,调度程序在当前线程准备好休眠之前生中断,这就迫使调度程序暂停线程,过一
段时间后重新启动线程,此时线程才能完成工作然后休眠。多余的上下文切换将导致性能
降低,而使用yield或sleep能防止这种多余的切换。要搞清楚这个问题会变得
多么复杂,就要花额外的时间进行思考。
有关线程更高级的讨论,请参考《9๗ginjaທva》第二版,doug
lea着,addison-9esley,2000。
练习
所选习题的答案都可以在《thethinkinginjavaannotatedsolutionguide》这本书的电子文
档中找到,你可以花少量的钱从uceecນkel处获取此文档。
1.从thread继承一个类,并重载run方法。在run中,打印一条消息,
然后调用sleep。重复三遍以后从run返回。在构造器中打印一条启动消เ息,
重载finaທlize并打印一条结束消息。再写一个ฐ线程类,在其run中调用
systemg9alization,在调用的时候分别打印消息。
为这些线程类创น建几个实例,运行它们并观察结果。
2.在dae摸nsjava中使用不同的休眠时间,并观察结果。
3.找到เ第八章greenhou色9trollerjavaທ这个例子,它包含了四个文件。
eventjava中的event类是基于观察时间来实现的。把event改成一个ฐ线程,并
修改其它的设计使得它们能与这个新的基于线程的event一起工作。
4.修改上一个ฐ练习,使用javautiltimer控制系统运行。
5๓.把simplethreadjava中的所有线程修改成后台线程,并验证一旦main
退出,程序立刻๑终止。
6.创建一个程序,产生大量timer对象,在时间到เ期后让它们执行一些简单的工作,
来演示javaທutiltimer可以伸缩到很大数目如果你要比较好的效果,可以看
看前面“窗体和小应用程序”这一章,那里使用timer对象在屏幕上画点,但在此向
控制台打印消息已经足够了。
7.演示类中ณ的同步控制方แ法可以调用同一个类上的另一个ฐ同步控制ๆ方法。后者也能
调用同一个类上的第三个同步方法。创น建一个单独的thread对象调用并第一个同步
控制方法。
8.建立两个ฐthread的子类,一个在run中启动,然后调用9ait,另一个
在run中捕获第一个线程对象的引用。它应该在过几秒种后对第一个线程调用
notifyall,使得第一个线程能打印一条消息。
9๗.写一个“忙等待”的例子。一个线程休眠一段时间然后把一个标志设为真。第二个
线程在一个ฐ9๗hile循环中观察这个标志这就是“忙等待”,当标志变为ฦ真的时候,
把这个标志设置为ฦ假,并向控制台报告这个变化。注意程序在“忙等待”里花费的时间,
然后重写这个ฐ程序,这时使用9๗ait而不是“忙等待”。
10่.修改restaurantjava,使用notifyaທll,观察程序的行为有何不同。
11.修改restaທurantjavaທ,加入多个服务员,并能ม够显示谁得到了各自的订单。
1้2.修改restaທuraທntjavaທ,使得多个服务员向多个厨师产生订单请求,厨师要
准备食品,并通知那个给他订单的服务员,你可能需要队列来保存进来的和出去的订
单。
13.修改上个练习,增加customer对象,它们作为线程实现。客户将向服务员下
订单,服务员把订单给厨师,厨师将准备好食品并通知相应的服务员,服务员再把食
物交给相应的客户。
14๒.修改pipediojaທva,使得色nder向一个文本文件里读取和送文本行。
15.改变diningphilosophersjava,使得哲学家拿下一根可用的筷子当哲学
家用完筷子之后,他们把筷子放在一个ฐ筷笼里。当哲学家要就餐的时候,他们就从筷
笼里取出下两根可用的筷子。这消เ除了死锁的可能吗?你能仅仅通过减少可用的筷
子数目就重新引入死锁吗?
16๔.从javautiltimer继承一个ฐ类,像stoppingjava里那ว样实现
requeststop方法。
17๕.修改simplethreadjava,使得所有线程在完毕之前接收到interrupt。
18.使用9ait和notify解决一个生产者,一个消เ费者的问题。生产者不
能覆盖消费者的缓冲区,这在生产的度大于消费的时候有可能ม生。如果消费者的