11.8 小结

在程序开发中使用多线程技术是一项复杂的任务,但是在很多情况下,多线程技术是必须使用的。以桌面程序来说,如果所有耗时的操作都在事件分发线程中完成,程序的界面会出现失去响应的情况。在实际开发中,对于多线程协作的场景,可以先对线程之间的交互模式进行抽象,并在java.util.concurrent包中寻找合适的同步方式与之对应。比如经典的生产者-消费者和读者-写者场景,使用java.util.concurrent包中提供的高层API可以很容易地实现。优先使用高层API,应该是Java多线程开发中的首要原则。如果已有的高层API无法满足需求,那么应该使用java.util.concurrent.atomic和java.util.concurrent.locks包提供的中层API来创建程序自己的同步API。而synchronized和volatile关键词,以及Object类中的wait、notify和notifyAll等低层API应该是最后才考虑的。

从理解和掌握多线程开发的角度出发,应该是按照从Java内存模型、低层API、中层API到高层API的顺序来进行学习,这也是本章对应内容的排列顺序;而在实际的开发中,应该按照相反的顺序来考虑这些API的使用。