1. 结束语
2. 参考资料
3. 反馈意见
结束语 | 第 1 页(共3 页) |
每个 Java 程序都使用线程,不论您知道与否。如果您正在使用 Java UI 工具箱(AWT 或 Swing)、Java Servlet、RMI、JavaServer Pages 或 Enterprise JavaBeans 技术,您可能没有意识到您正在使用线程。
在许多情况中,您可能想要显式地使用线程以提高程序的性能、响应速度或组织。这些情况包括:
- 在执行耗时较长的任务时,使用户界面的响应速度更快
- 利用多处理器系统以并行处理多个任务
- 简化仿真或基于代理的系统的建模
- 执行异步或后台处理
虽然线程 API 很简单,但编写线程安全的程序并不容易。在线程之间共享变量时,必须非常小心,以确保正确同步了对它们的读写访问。当写一个可能接下来由另一个线程读取的变量,或者读取可能由另一个线程写过的变量时,必须使用同步以确保对数据的更改在线程之间是可见的。
当使用同步保护共享变量时,必须确保不仅使用了同步,而且读取器和写入器在同一个监控器上同步。而且,如果依赖对象的状态在多个操作中保持相同,或者依赖多个变量互相保持一致(或者,与它们过去的值一致),那么必须使用同步来强制实现这一点。但简单地同步一个类中的每一个方法并不能使它变成线程安全的 ― 只会使它更容易发生死锁。
参考资料 | 第 2 页(共3 页) |
下载
- 请研究 Doug Lea 的 util.concurrent 包(http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html),它包含了许多用于构建有效并发应用程序的有用的类。
文章和教程
- “Synchronization and the Java Memory Model”(http://gee.cs.oswego.edu/dl/cpj/jmm.html)摘录自 Doug Lea 撰写的着重讨论
synchronized
实际意义的一书。 - 在“Writing multithreading Java applications”(developerWorks,2001 年 2 月,http://www-106.ibm.com/developerworks/library/j-thread.html)一文中,Alex Roetter 概述了 Java 多线程化中涉及的问题,并提供了常见问题的解决方案。
- Brian Goetz 撰写的“Threading lightly, Part 1: Synchronization is not the enemy”(developerWorks,2001 年 7 月,http://www-106.ibm.com/developerworks/library/j-threads1/)研究了如何管理并发应用程序的性能。
- Jeff Friesen 撰写的“Achieve strong performance with threads”(JavaWorld,2002 年 5 月,http://www.javaworld.com/javaworld/jw-05-2002/jw-0503-java101.html)是关于使用线程的一个四部分教程。
- “Double-checked locking: Clever, but broken”(JavaWorld,2001 年 2 月,http://www.javaworld.com/jw-02-2001/jw-0209-double.html)详细研究了 Java Memory Model,以及在某些情况下同步失败的惊人后果。
- 线程安全性是棘手的问题。“Java theory and practice: Safe construction techniques”(developerWorks,2002 年 6 月,http://www-106.ibm.com/developerworks/library/j-jtp0618.html)提供了一些安全地构造对象的提示。
- 在“Threads and Swing”(http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html)中,Sun 公司的技术人员研究了安全地使用 Swing 的规则,并且引入了有用的
SwingWorker
类。
推荐书籍
- Doug Lea 的 Concurrent Programming in Java,第二版(Addison-Wesley,1999 年,http://www.amazon.com/exec/obidos/ASIN/0201310090/none0b69)是关于围绕在 Java 应用程序中多线程编程的难解问题的权威书籍。
- Paul Hyde 的 Java Thread Programming(http://www.amazon.com/exec/obidos/ASIN/0672315858/none0b69)是关于许多现实世界中多线程问题的好教程和参考大全。
- Allen Holub 的 Taming Java Threads(http://www.amazon.com/exec/obidos/ASIN/1893115100/none0b69)一书是 Java 线程编程难题的有趣介绍。
其它参考资料
util.concurrent
包正在根据 Java Community Process JSR 166(http://www.jcp.org/jsr/detail/166.jsp)进行正式化,以便包含在 JDK 的 1.5 发行版中。- Foxtrot 项目(http://foxtrot.sourceforge.net/)是另一个在 Swing 应用程序中使用线程的方法,它可能更简单。
- 在 developerWorks Java 技术专区(http://www-900.ibm.com/developerworks/cn/java/)中,您会找到几百篇关于 Java 编程的各个方面的文章。
- 请访问 developerWorks Java 技术教程页面(http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/java-onlinecourse-bytitle),以获取 developerWorks 中免费教程的完整清单。