关于Synchronized的小结

目录

一.特性

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 评论

留下您的评论.