Java 提供了多线程编程的内置支持,让我们可以轻松开发多线程应用。
Java 中我们最为熟悉的线程就是 main 线程——主线程。
一个进程可以并发多个线程,每条线程并行执行不同的任务。线程是进程的基本单位,是一个单一顺序的控制流,一个进程一直运行,直到所有的“非守护线程”都结束运行后才能结束。Java 中常见的守护线程有:垃圾回收线程、
这里简要述说以下并发和并行的区别。
并发:同一时间段内有多个任务在运行
并行:同一时间点上有多个任务同时在运行
多线程可以帮助我们高效地执行任务,合理利用 CPU 资源,充分地发挥多核 CPU 的性能。但是多线程也并不总是能够让程序高效运行的,多线程切换带来的开销、线程死锁、线程异常等等问题,都会使得多线程开发较单线程开发更麻烦。因此,有必要学习 Java 多线程的相关知识,从而提高开发效率。
今天小编就给大家带来这本《Java多线程编程核心技术》,涵盖的知识点一目了然,希望能以此书为你们拓展出更深入,更全面的线程思路,话不多说了,给大家展示内容吧!
读者对象
本书适合所有Java程序员阅读,尤其适合以下读者:
- Java多线程开发者
- Java并发开发者
- 系统架构师
- 大数据开发者
- 其他对多线程技术感兴趣的人员
目录大纲
第1章Java多线程技能
本章中主要介绍Thread类中的核心方法。Thread类的核心方法较多,读者应该着重掌握如下关键技术点:
- 线程的启动
- 如何使线程暂停
- 如何使线程停止
- 线程的优先级
- 线程安全相关的问题
上面的5点也是本章学习的重点与思路,掌握这些内容是学习Java多线程的必经之路
第2章对象及变量的并发访问
本章主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题。多线程中的同步问题是学习多线程的重中之重,这个技术在其他的编程语言中也涉及,如C++或C#。
本章应该着重掌握如下技术点:
- synchronized对象监视器为Object时的使用
- synchronized对象监视器为Class时的使用
- 非线程安全是如何出现的
- 关键字volatile的主要作用
-
关键字volatile与synchronized的区别及使用情况
第3章线程间通信
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体。线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督。在本章中需要着重掌握的技术点如下:
- 使用wait/notify实现线程间的通信
- 生产者/消费者模式的实现
- 方法join的使用
-
ThreadLocal类的使用
第4章Lock的使用
本章将要介绍使用Java5中Lock对象也能实现同步的效果,而且在使用上更加方便。
本章着重掌握如下2个知识点:
- ReentrantLock类的使用
-
ReentrantReadWriteLock类的使用
第5章定时器Timer
定时/计划功能在移动开发领域使用较多,比如Android技术。定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联的。在本章节着重掌握如下技术点:
- 如何实现指定时间执行任务
-
如何实现按指定周期执行任务
第6章单例模式与多线程
本章的知识点非常重要,通过单例模式与多线程技术相结合,在这个过程中能发现很多以前从未考虑过的情况,一些不良的程序设计方法如果应用在商业项目中,将会遇到非常大的麻烦。本章的案例也将充分说明,线程与某些技术相结合时要考虑的事情有很多。在学习本章时只需要考虑一件事情,那就是:如何使单例模式遇到多线程是安全的、正确的。
在标准的23个设计模式中,单例设计模式在应用中是比较常见的。但在常规的该模式教学资料介绍中,多数并没有结合多线程技术作为参考,这就造成在使用多线程技术的单例模式时会出现一些意想不到的情况,这样的代码如果在生产环境中出现异常,有可能造成灾难性的后果。本章将介绍单例模式结合多线程技术在使用时的相关知识。
第7章拾遗增补
本章是本书的最后一章,在本章中将对前面几章遗漏的知识点进行补充,丰富多线程案例的完整性。在开发此类应用中,这些案例能起到优化性能的作用,至少在遇到某些情况时会回想起这些案例的初衷与解决办法。
本章应该掌握如下知识点:
- 线程组的使用
- 如何切换线程状态
- SimplcDataFormat类与多线程的解决办法
-
如何处理线程的异常
接下来是小编为大家整理的一些2020高频并发编程面试题库,希望能对各位大哥们起点作用!
Synchronized相关问题
- Synchronized用过吗 ,其原理是什么?
- 你刚才提到获取对象的锁 ,这个“ 锁 ”到底是什么?如何确定对象的锁 ?
- 什么是可重入性,为什么说Synchronized是可重入锁?
- JVM对Java的原生锁做了哪些优化?
- 为什么说Synchronized是非公平锁?
- 什么是锁消除和锁粗化?
- 为什么说Synchronized是一个悲观锁﹖乐观锁的实现原理又是什么?什么是CAS,它有什么特性?
- 乐观锁一定就是好的吗?
可重入锁ReentrantLock及其他显式锁相关问题
- 跟Synchronized相比,可重入锁ReentrantLock其实现原理有什么不同?
- 那么请谈谈AQS框架是怎么回事儿?
- 请尽可能详尽地对比下Synchronized和ReentrantLock的异同?
- ReentrantLock是如何实现可重入性的?
- 除了ReetrantLock,你还接触过JUC中的哪些并发工具?
- 请谈谈ReadWriteLock和StampedLock?
- 如何让Java的线程彼此同步?你了解过哪些同步器?请分别介绍下。
- CyclicBarrier和CountDownLatch看起来很相似,请对比下呢?
Java线程池相关问题
- Java中的线程池是如何实现的?
- 创建线程池的几个核心构造参数?
- 线程池中的线程是怎么创建的?是一开始就随着线程池的启动创建好了吗?
- 既然提到可以通过配置不同参数创建出不同的线程池,那么
- Java中默认实现好的线程池又有哪些呢?﹖请比较它们的异同。
- 如何在Java线程池中提交线程?
Java内存模型相关问题
- 什么是Java的内存模型,Java中各个线程是怎么彼此看到对方的变量的?
- 请谈谈volatile有什么特点,为什么它能保证变量对所有线程的可见性?
-
既然volatile能够保证线程间的变量可见性,是不是就意味着基于volatile变量的运算就是并发安全的?