计算机系统应用教程网站

网站首页 > 技术文章 正文

告诉你所不知道的java锁机制 java锁机制与各锁的使用场景

btikc 2024-10-08 01:17:22 技术文章 46 ℃ 0 评论

大家在写并发程序时,都会用到锁来隔离临界代码块,例如lock synchronize,其中synchronize主修饰在代码块或方法上,而方法有可能是普通的方法也有可能是static方法,你知道几种修饰用法有什么区别吗?

1.修饰在同步代码块上,一般这么使用synchronize(obj){},小括号内部是锁对象,只能拿到obj锁对象的线程才有资格执行同步块代码!

2.修饰在普通方法上,一般这么使用

public synchronize void method(){},只有获得类实例对象的monitor监视器锁,这样的线程才有资格执行该方法!但是不同类实例之间不存在锁冲突!

3.修饰在静态方法上,一般这么使用

public synchronize static method(){},该锁住的是类对象,而不是实例对象,如果一个线程拿到锁执行该方法,其他所有的线程都没资格执行该方法,记住!是所有线程,包括其他实例的线程!

这三种方式大家应该都用过,程序出现关于synchronize导致的性能问题,不知道朋友们有没有遇到过。例如,单线程时用stringbuffer频繁执行字符串append操作,或者vector向量集合用于操作数据,用单线程反而会变慢,因为会重复获取锁和释放锁,但其实背后也不见得一定会慢,至于为何,那就是要了解分级锁的偏向锁概念和原理,具体不展开详述!

想了解详细原理的朋友可以关注我,后续陆续推出各种流行技术介绍。。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表