前言
并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。
衡量一名“程序猿”的技术实力,一般会看你是否具备深度的系统性能调优的能力。云计算的时代,对系统的高性能、高并发要求更高。所以,深入了解和掌握Java的多线程机制原理,非常有用,非常必要。
笔记尽量减少“哕嗦式的文字语言,全部用Demo式案例来讲解技术点的实现,使读者看到代码及运行结果后就可以知道此项目要解决的是什么问题。类似于网络中Blog的风格,可让读者用最短的时间学会此知识点,明白此知识点如何应用,以及在使用时要避免什么。这就像“瑞士军刀”,虽短小,却锋利。笔记的目的就是帮读者快速学习并解决问题。
这本书的所有知识均来自于作者多年的项目实践,倾注了作者多年的心血。讲解的深入浅出,让你掌握起来毫不费力。如果你想成为一名架构师,如果你想成为一名资深的技术大牛,强烈推荐你读一读,你值得拥有!
并发编程:核心方法与框架
读者对象
Java初级、中级程序员Java多线程开发者Java并发开发者系统架构师大数据开发者其他对多线程技术感兴趣的人员笔记特点
不留遗漏——全面覆盖Java并发知识点;直击要害——实战化案例,精准定位技术细节;学以致用——精要式演示,确保开发/学习不脱节;潜移默化——研磨式知识讲解,参透技术要点;提升效率——垂直式技术精解,不绕弯路;循序提升——渐进式知识点统排,确保连贯。内容简介
第1章讲解了Semaphore和Exchanger类的使用,学完本章后,能更好地控制线程间的同步性,以及线程间如何更好、更方便地传输数据。第2章是第1章的延伸,主要讲解了CountDownLatch、CyclicBarier类的使用及在Java并发包中对并发访问的控制。本章主要包括Semaphore、CountDownlatch和CylicBrrier的使用,它们在使用上非常灵活,所以对于API的介绍比较详细,为读者学习控制同步打好坚实的基础。第3章是第2章的升级,由于CountDownLatch和CyeliBarier类都有相应的弊端,所以在JDK1.7中新增加了Phaser类来解决这些缺点。第4章中讲解了Executor接口与ThreadPoolExecutor线程池的使用,可以说本章中的知识也是Java并发包中主要的应用技术点,线程池技术也在众多的高并发业务环境中使用。掌握线程池能更有效地提高程序运行效率,更好地统筹线程执行的相关任务。第5章中讲解Future和Callable的使用,接口Runnable并不支持返回值,但在有些情况下真的需要返回值,所以Future就是用来解决这样的问题的。第6章介绍Java并发包中的CompletionService的使用,该接口可以增强程序运行效率,因为可以以异步的方式获得任务执行的结果。第7章主要介绍的是ExecutorService接口,该接口提供了若干方法来方便地执行业务,是比较常见的工具接口对象。第8章主要介绍计划任务ScheduledExecutorService的使用,学完本章可以掌握如何将计划任务与线程池结合使用。第9章主要介绍ForkJoin分治编程。分治编程在多核计算机中应用很广,它可以将大的任务拆分成小的任务再执行,最后再把执行的结果聚合到一一起,完全利用多核CPU的优势,加快程序运行效率。第10章主要介绍并发集合框架。Java中的集合在开发项目时占有举足轻重的地位,在Java并发包中也提供了在高并发环境中使用的Java集合工具类,读者需要着重掌握Queue接口的使用。
第1章Semaphore和Exchanger的使用
类Semaphore的主要作用是限制并发执行的线程个数,它具有synchronized所不具有的强大功能,比如等待获得许可的同时可以加入等待时间,还有尝试是否可以持有锁等这类扩展功能,可以说Semaphore类是强有力的控制并发线程个数的解决方案之一,而Exchanger是线程间传输数据的方式之一,而且在传输的数据类型上并没有任何限制。
第2章CountDownLatch和CyclicBarrier的使用
本章主要介绍了CountDownLatch、CyclicBarrier这两个类的使用,使用CountDown-Latch类可以实现两种角色的线程等待对方的效果,而CyclicBarrier类可以使同类线程互相等待达到同步的效果,使用这两个类可以更加完善地实现线程对象之间的同步性,对线程对象执行的轨迹控制更加方便。
第3章Phaser的使用
类Phaser提供了动态增减parties计数,这点比CyclicBarrier类操作parties更加方便,通过若干个方法来控制多个线程之间同步运行的效果,还可以实现针对某一个线程取消同步运行的效果,而且支持在指定屏障处等待,在等待时还支持中断或非中断等功能,使用Java并发类对线程进行分组同步控制时,Phaser比CyclicBarrier类功能更加强大,建议使用。
第4章Executor与ThreadPoolExecutor的使用
本章主要介绍ThreadPoolExecutor类的构造方法中各个参数的作用与使用效果,还介绍了Executors工厂类常用API的使用,也将大部分ThreadPoolExecutor线程池类的常见API一同进行了介绍,并且对ThreadPoolExecutor线程池的拒绝策略进行了实验,通过使用线程池能最大幅度地减少创建线程对象的内存与CPU开销,加快程序运行效率,也对创建线程类的代码进行了封装,方便开发并发类型的软件项目。
第5章Future和Callable的使用
本章对Future和Callable接口中的全部API进行了介绍,这两个接口的优点就是从线程中返回数据以便进行后期的处理,但FutureTask类也有其自身的缺点,就是阻塞性,解决这个缺点请参看第6章。
第6章CompletionSernvice的使用
接口CompletionService完全可以避免FutureTask类阻塞的缺点,可更加有效地处理Future的返回值,也就是哪个任务先执行完,CompletionService就先取得这个任务的返回值再处理。
第7章接口ExecutorService的方法使用
接口ExecutorService中的方法都以便携的方式去创建线程池,使用两个主要的方法invokeAny(和invokeAll0来取得第一个首先执行完任务的结果值,以及全部任务的结果值。
第8章计划任务ScheduledExecutorService的使用
本章介绍了基于线程池ThreadPoolExecutor的ScheduledThreadPoolExecutor计划任务执行池对象,使用此类可以高效地实现计划任务线程池,不再重复创建Thread对象,提高了运行效率。此类也支持间隔运行的功能。
第9章Fork-Join分治编程
在本章主要介绍了Fork-Join分治编程类主要的API,需要细化掌握ForkJoinTask的2个常用子类的fork分解算法,虽然分治编程可以有效地利用CPU资源,但不要为了分治编程而分治,应该结合具体的业务场景来进行使用。
第10章并发集合框架
本章主要介绍了Java并发包中的集合框架,集合在使用Java语言中是非常重要的技能点,而并发集合框架在原来功能的基础上进行再次强化,完全支持多线程环境下的数据处理,大大提高了开发效率,有效保证了数据的存储结构,以常见的阻塞与非阻塞算法加强并发包中功能的可用性。
总结
Java并发编程无处不在,服务器、数据库、应用,Java并发是永远不可跳过的沟坎,优秀的程序员一定要在Java并发领域进行炼狱式的学习,吸收消化并最终转化成软件产品成果。另外,单纯从Java程序员成长计划这方面进行考虑,Java多线程/并发也依然是想深入学习Java必须要掌握的技术,比如在软件公司中接触的“缓存”,”分布式一致性”,高并发框架”,“海量数据处理”,“高效订单处理”等都与Java多线程、Java并发紧密相关。进行大数据、分布式、高并发类的专题攻克时,并发编程的学习必不可少,但并发编程学习曲线陡峭,多弯路和“坑”。本书基本完全覆盖了Java并发包中核心类、API与并发框架,最大程度介绍了每个常用类的使用,以案例的方式进行讲解,以使读者快速学习,迅速掌握。
由于内容太多就不一一展示了,这4份并发编程手册分别为、、、页,需要完整版的朋友,可以转发此文