🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 14.7 练习 (1) 从`Thread`继承一个类,并(重载)覆盖`run()`方法。在`run()`内,打印出一条消息,然后调用`sleep()`。重复三遍这些操作,然后从`run()`返回。在构造器中放置一条启动消息,并覆盖`finalize()`,打印一条关闭消息。创建一个独立的线程类,使它在`run()`内调用`System.gc()`和`System.runFinalization()`,并打印一条消息,表明调用成功。创建这两种类型的几个线程,然后运行它们,看看会发生什么。 (2) 修改`Counter2.java`,使线程成为一个内部类,而且不需要明确保存指向`Counter2`的一个。 (3) 修改`Sharing2.java`,在`TwoCounter`的`run()`方法内部添加一个`synchronized`(同步)块,而不是同步整个`run()`方法。 (4) 创建两个`Thread`子类,第一个的`run()`方法用于最开始的启动,并捕获第二个`Thread`对象的引用,然后调用`wait()`。第二个类的`run()`应在过几秒后为第一个线程调用`modifyAll()`,使第一个线程能打印出一条消息。 (5) 在`Ticker2`内的`Counter5.java`中,删除`yield()`,并解释一下结果。用一个`sleep()`换掉`yield()`,再解释一下结果。 (6) 在`ThreadGroup1.java`中,将对`sys.suspend()`的调用换成对线程组的一个`wait()`调用,令其等候2秒钟。为了保证获得正确的结果,必须在一个同步块内取得`sys`的对象锁。 (7) 修改`Daemons.java`,使`main()`有一个`sleep()`,而不是一个`readLine()`。实验不同的睡眠时间,看看会有什么发生。 (8) 到第7章(中间部分)找到那个`GreenhouseControls.java`例子,它应该由三个文件构成。在`Event.java`中,`Event`类建立在对时间的监视基础上。修改这个`Event`,使其成为一个线程。然后修改其余的设计,使它们能与新的、以线程为基础的Event正常协作。