JAVA锁之彻底理解

理解Java世界的锁之前,要把Java世界的锁与操作系统的锁严格区分开,并且要理解为什么要做这样的区隔,就能彻底理解这一部分的内容了。

先讨论操作系统的锁,他其实分posix和非posix两种实现。posix是一种对各种类型的操作系统的一种封装,使得应用开发者在开发界面可以达成一个统一认识。但我觉得实际上事与愿违,任何一种概念的出现,都对后来人的理解增加了一点难度。而且实际上posix封装并不彻底,现在任何一种大型的软件,都有很多针对不同操作系统封装的代码,JVM里面也同样有大量这样的代码。

在Linux上,先理解一个简单而又关键的顺序,JVM依赖pthread的mutex和condition实现线程同步,pthread库依赖linux的系统调用futex而实现锁。futex依赖cas自旋和系统调用semaphore实现锁。

但是这里面的依赖均不是一个简单的封装,而是一个极其复杂的使用,每一层都做了相当多的工作,均十分不信任底层的实现,都是在迫不得已的情况下才调用底层,仿佛底层是个弱智,可能在最初实现的时候情况是这样。但个人理解实际上底层经过长时间努力也使得性能很高了,可是上层的代码已经写成,木已成舟。

你可能感兴趣的:(JAVA锁之彻底理解)