一、前言
二、锁的建议
1、锁的分化,具体可以借鉴block queue的take与put分锁
2、锁定定义块合适,不适合太大也不适合太小
3、JAVA虚拟机自带锁一步步:
3.1 锁偏向(统一进程直接进入同步)------》
3.2 轻量级锁(开启:-XX:+UseBiasedLockong)------》
3.3 自旋锁(空循环,等待)-----》
3.4锁消除(是否真需要同步分析,开启逃逸分析:-XX:+EliminateLocks)
4、ThreadLocal工具,原理:开很多线程来做同一份工作。缺点:线程不安全,不能操作共享数据
应用场景:
5、牛叉:忘掉我们该死得锁是哟高CAS操作,这么做直接跟CPU交道适用Atomic Integer long reference 等等,都可以适用。
6.1、互斥使用(资源独占)
一个资源每次只能给一个进程使用
6.2、不可强占(不可剥夺)
资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
6.3、请求和保持(部分分配,占有申请)
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)
6.4、循环等待
存在一个进程等待队列
{P1 , P2 , … , Pn},
其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路