返回介绍

14.7 练习

发布于 2024-10-15 23:56:32 字数 989 浏览 0 评论 0 收藏 0

(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 正常协作。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文