在操作系统中进程是进行资源分配和调度的基本单位,也是线程的容器,而线程也可以进一步划分作为协程的容器,比如说 Go 语言里的 goroutine。
每个进程都是一个实体,有着自己的地址空间,代表一个执行中的程序;线程则是进程中的一个单一顺序的控制流,是处理器调度的基本单位,每个进程中至少有一个线程,它们共享进程的地址空间和各项资源;协程本质上是一种用户态线程,不需要操作系统调度,它的实现是寄存在线程当中,因此开销非常小,一个进程里可以存在着数十倍与线程数量的协程,协程与线程不同的地方在于控制权不在操作系统而由用户自己掌控,什么时候从一个协程切换到另一个协程完全由用户自己决定。
这种技术作为解决单核转多核 CPU 性能提升的一种解决方案,作用在于让一个多核心的处理器甚至多个这样的处理器高效、正确的工作,如何将串行程序改造成并行,已经成为了一门学问。
Java多线程无处不在,如服务器、数据库、应用。多线程可以有效提升计算和处理效率,大大提升吞吐量和可伸缩性,深得广大程序员和公司的青睐。很多人学习完JavaSE/JavaEE之后想往更深入的技术进行探索,比如对大数据、分布式,高井发类的专题进行攻克时,立即遇到针对java lang包中线程类的学习,但线程类的学习并不像JDBC一样简单,学习曲线陡峭,多弯路与“坑”。要学习这些热点技术, Java多线程技术避无可避。
有了学习路线,接下来咱们就要实战学习了。小编特意为大家准备了一篇Java多线程编程核心与实战的秘籍。一起来看一下吧~~~
守护线程
本章介绍了Thread类的API,在使用这些API的过程中,会出现一些意想不到的情况,其实这也是多线程具有不可预知性的一个体现。学习和掌握这些常用情况,也就掌握了多线程开发的命脉与习性,是学习多线程更深层知识的基础。
通过本章学习,朋友们对关键字synchronized在使用上不再陌生,知道什么时候使用它,它所解决的哪些问题是开发上的重点。学习完多线程同步后就可以有效控制线程间处理数据的顺序性,及对处理后的数据进行有效值的保证,更好地对线程执行结果有正确的预期。
经过本章的学习,可以将以前分散的线程对象进行彼此的通信与协作,线程任务不再是单打独斗,更具有团结性,因为它们之间可以互相通信,就像命令官与执行者一样。对任务的计划规划更加合理,不再是随机的和盲目的了。
在本章中完全可以使用Lock对象将synchronized关键字替换掉,而且其具有的独特功能也是synchronized所不具有的。在学习并发时,Lock是synchronized关键字的进阶,掌握Lock有助于学习并发包中源代码的实现原理,在并发包中大量的类使用了Lock接口作为同步的处理方式。
第5章讲解了Timer定时器类,其内部实现就是使用的多线程技术。定时器的计划任务执行是很重要的技术点,包括在Android开发时都会有深入的使用,所以会为读者详细讲解。
本章使用若干案例来阐述单例模式与多线程结合时遇到的情况与解决方法。本章也复习了不同单例模式的使用,使得以后再遇到单例模式时,就能从容面对多线程环境的情况了。
线程异常处理的传递
本章弥补了前面几个章节遗漏的技术空白点,这些示例是对多线程技术学习的补充,有助于更细化地理解多线程的细节。比如,理解线程的状态后,完全可以对不同状态下的线程正在做哪些事情了如指掌;学习了线程组后可以对线程的组织实施更有效的规划;SimpleDateFormat类在遇到多线程时也会出现意想不到的异常。最后学习了线程在出现异常时的常用处理方式。