目录
一.特性
1.既是乐观锁又是悲观锁
2.是轻量级锁,也是重量级锁
3.不是读写锁,是互斥锁
4.是可重入锁
5.非公平锁
6.加锁之后,运行完毕自动解锁释放资源
二:Synchronized使用
第一种:定义一个额外的变量来控制加锁和解锁(类似于吉祥物)
第一种:直接给类/方法上锁
三.synchronized的优化
运行机制上的优化
编译阶段进行的优化手段
锁消除
程序员代码上进行优化
锁粗化
一.特性
1.既是乐观锁又是悲观锁
2.是轻量级锁,也是重量级锁
3.不是读写锁,是互斥锁
4.是可重入锁
5.非公平锁
6.加锁之后,运行完毕自动解锁释放资源
二:Synchronized使用
第一种:定义一个额外的变量来控制加锁和解锁(类似于吉祥物)
public class demo2 {
//定义一个Object类,名字叫做lock的变量作为锁static Object lock = new Object();public static void main(String[] args) {synchronized (lock){}}
}
第一种:直接给类/方法上锁
//给类上锁
public class demo2 {synchronized public static void main(String[] args) {}
}//给方法上锁
public class demo2 {synchronized static void func(){System.out.println("hello");}public static void main(String[] args) {}
}
三.synchronized的优化
运行机制上的优化
无->偏向锁->轻量级锁->重量级锁
注意:在轻量级锁这里synchronized,采用[自适应自旋锁]
编译阶段进行的优化手段
锁消除
列如StringBuffer,他每次apped操作都是需要加锁和解锁,如果只有简单的append操作的话
那么编译器就直接进行一次加锁和解锁,而不是多次加锁和解锁
程序员代码上进行优化
锁粗化
举一个例子
假如说你现在需要向领导汇报三个工作
你可以选择,分三次汇报三个不同的工作
或者选择,一次汇报三个工作
显然,我们是更倾向于一次汇报三个工作的,因为他更高效
本文链接:https://my.lmcjl.com/post/7613.html
展开阅读全文
4 评论