在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。Java5.0增加了一种新的机制:ReentrantLock。与之前提到过的机制相反,ReentrantLock并不是一种替代内置加锁的方法,而是当内置加锁机制不适应时,作为一种可选的高级功能。
为了方便的阅读、理解 Spark 源码,debug 是个好方式。来介绍一下Spark 在 IntelliJ IDEA 中 Debug 环境构建。
线程的最主要目的是提高程序的运行性能,使程序更加充分地发挥系统的可用处理能力,从而提高系统的资源利用率,此外,还可以使程序在运行现有任务的情况下立即开始处理新的任务,从而提高系统的响应性。许多提升性能同样会增加复杂性,也会增加在安全性和活跃性上发生失败的风险。
在安全性与活跃性之间通常存在着某种制衡,我们使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致“锁顺序死锁”。同样,我们使用线程池和信号量来限制对资源的使用,但这些被限制的行为可能会导致资源死锁。
这一部分将介绍对线程池进行配置与调优的一些高级选项,并分析在使用任务执行框架时需要注意的各种危险, 以及一些使用 Executor的高级示例。