天天看点

JAVA并发处理经验(三)锁的优化与注意

一、前言

二、锁的建议

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占有的资源,形成一个进程等待环路