最先是:syncronized+wait/notify
不知道Java的syncronized的设计者是怎么思考的,将OOP的对象当做是条件变量,将syncronized 临界区 作为管程资源,真的是一个大手笔:想象整个Jvm就是一个大管程,每个Object都是一个condition
从每一个对象头的markword 都有轻量锁和重量锁的 标志位 也能看的出来
后来是Condition,Lock,ReentreLock
因为syncronized这个锁的粒度实在是太大了,而且设计的自定义自由度不够,而且不支持读写锁分离,不适合 奔腾发展的 计算机组成原理 对现代计算机的优化,所以提出了concurrent包来方便Java程序员进一步操作