提起多线程编程,恐怕许多开发人员都会摇头表示不懂。确实,在校生和刚就职的开发人员往往很少有机会能够实践多线程编程。多数情况下,他们都是在开发框架下编写单线程的业务代码,而多线程的部分则被封装在了框架内部。即使是经验丰富的开发人员也会感叹他们曾经在多线程上栽过的跟头。但不可否认的是,多线程的确是一把利器,活用多线程有助于提高程序的响应性和吞吐量。可以毫不夸张地说,多线程是开发人员在继续“升级”的过程中必须打倒的一只“怪物”。
“设计模式”一词也常常会让开发人员感到畏惧。其实设计模式不过是对代码设计方式的总结和归纳。在我们的代码中,设计模式无处不在,只是我们没有注意到它们而已。善用设计模式可以帮助我们编写出具有高可复用性且松耦合的代码。
那么,将多线程和设计模式合而成一的秘籍放在我们面前,我们是该望而却步呢?还是欣喜若狂?嘿嘿,今天笔者就为大家分享这篇图解Java多线程设计模式,希望能够帮到大家更好的学习~~~
序章1:Java线程
本章主要介绍Java线程的一些基础知识。如果大家已经熟悉这些内容,也可阅读一下以便检验自己的掌握程度。
序章2:多线程程序的评价标准
在本章中,我们学习了多线程程序的评价标准,同时也了解到这些评价标准有时是互相制约的。
第1章:Single Threaded Execution模式——能通过这座桥的只有一个人
本章将介绍多线程编程中最基础的一种设计模式——Single Threaded Execution模式。该模式可以确保执行处理的线程只能是一个,这样就可以有效防止实例不一致。本章还将深入介绍Java语言的synchronized关键字,并给出计数信号量java. util. concurrent . Semaphore的示例程序。
第2章:Immutable模式——想破坏也破坏不了
本章将介绍Immutable模式,即实例一旦创建完毕,其内容便不可更改的模式。在该模式下,由于实例不会不一致,所以无需执行互斥处理,程序性能也能提高。本章还将讲述Java语言中final的含义,并给出Collections. synchronizedList及java. util. concurrent . CopyOnWriteArrayList的示例程序。
第3章:Guarded Suspension模式——等我准备好哦
本章将介绍Guarded Suspension 模式,即在实例进入目标状态之前,防止线程继续执行的模式。该模式也可以防止实例不一致。通过本章还可以练习Java语言中的wait方法和notifyAll方法的使用。本章还将给出阻塞队列java.util. concurrent . LinkedBlockingQueue的示例程序。
第4章:Balking模式——不需要就算了
第4章将介绍Balking模式,即如果实例未进入目标状态,则中断方法执行的模式。该模式可防止执行无效的等待和多余的方法。
第5章:Producer-Consumer模式——我来做, 你来用
第5章将介绍Producer-Consumer模式。在该模式下,多个线程能够协调运行。采用该模式时,生成数据的线程与使用数据的线程在并发运行时不会互相抢占。本章还将给出阻塞队列java . util . concurrent . ArrayBlockingQueue的示例程序。
第6章:Read-WriteLock模式——大家一起读没问题, 但读的时候不要写哦
第6章将介绍Read-Write Lock模式,该模式会采用灵活的互斥处理。在该模式下,写数据的线程只能有一个,但读数据的线程可以有很多。该模式能够提高程序的整体性能。本章还将给出可重人的java.util.concurrent. locks . Reent rantReadWriteLock的示例程序。
第7章:Thread-Per-Message模式——这项工作就交给你了
第7章将介绍Thread-Per-Message模式,即将处理委托给其他线程的模式。在该模式下,线程可以将任务委托给其他线程,自己则直接处理接下来的工作。该模式能够提高程序的响应性。本章还将介绍Java语言中内部类的使用方法,并给出java .util . concurrent包中Executor和ExecutorService的示例程序。
第8章:Worker Thread模式——工作没来就一直等, 工作来了就干活
第8章将介绍WorkerThread模式,即多个线程通过线程池进行等待,然后按照顺序接受工作并执行的模式。该模式可减少创建线程时的资源消耗,还可以通过调节等待线程的个数来控制可用的资源量。本章还将介绍AWT及Swing ( JFC )的线程处理方法,并给出通过java. util. concurrent包来使用线程池的示例程序。
第9章:Future 模式——先给您提货单
第9章将介绍Future模式。在该模式下,可以同步获取交给其他线程的任务的结果。该模式适用于调用异步方法的情况。另外,本章还将给出java .util.concurrent. Future、FutureTask及Callable的示例程序。
第10章:Two-Phase Termination模式——先收拾房间再睡觉
本章将介绍用于终止线程的Two-Phase Termination模式。该模式能够采用合适的终止处理来安全地终止线程。本章还将介绍线程的中断处理,并给出java . util. concurrent包中CountDownLatch、CyclicBarrier 的示例程序。
第11章:Thread-Specific Storage模式——个线程一个储物柜
第11章将介绍Thread-Spcific-Storage模式。在该模式下,每个线程都会拥有自己的变量空间。采用该模式时,多个线程之间的变量空间是完全分离的,所以并不需要执行互斥处理。本章还将介绍java. lang . ThreadLocal类的使用方法。
第12章:Active Object模式——接收异步消息的主动对象
第12章将介绍Active Object模式。在该模式下,程序会创建主动对象。该主动对象将接收外部消息,并交由自已的线程来处理。采用该模式时,方法调用和方法执行是彼此分开的。本章还将给出使用了java. util .concurrent包中的类的示例程序。
第13章:总结——多线程编程的模式语言
第13章将采用模式语言的形式归纳本篇所介绍的12种模式之间的关系。
最后,笔者还整理了一些Java多线程面试题~~~