final常亮,读取对象与读取值,不能重排序
sychronized会将代码块中的变量刷新到内存里面
sychronized底层是用Monitor
对象头是对象的hashCode和对象的分代年龄
无所,偏向锁,轻量锁,重量锁
挂起。自旋。
挂起有上下文操作,
自旋没有切换耗cpu,自旋最大时间,最大次数
自旋锁,获取锁的一种方式
sychronized同步块四种锁升级机制优化:
1、如果之后一个线程的时候,只是使用了偏向锁,将锁的标志位改为00, 这种情况下没有任何上下文切换,,当发现有线程竞争时候将锁的标志位改为01,这时候成为了轻量级锁,轻量级锁其实也是无锁化的,用的cas机制,当cas等待的线程自旋到一定时间后仍然没有获取锁,将会升级成为重量级锁,线程直接等待,不再自旋,调用的操作系统的monitor Mutex Lock互斥锁来实现锁机制
这些优化提升应用程序的性能
AotumicLong
LongAdder优化了AotumicLong,分散热点,但是只能保证最终一致性,
读写锁StampLock
读:写 1000:1,写锁可能饿死
此锁可以不阻塞写,读锁按照读取版本号的问题来读取,版本号一致才能读取,doun li在类里面写了例子,也可以按照阻塞写来
completeableFuture用法
流式处理
高性能队列:
lamada表达式