多线程synchronized三种使用方式

一(灵活、对象锁)、synchronized(){}以同步代码块的形式使用时应注意:
1、线程同步机制目的就是让线程排队执行
2、小括号里填的数据决定了让哪些线程同步执行大括号里的代码
3、每当有线程遇到synchronized(){}代码时:
首先要尝试获取小括号当中的对象锁,如果拿到了这个对象锁,就会占有这个锁不让其他线程获得这个锁,然后执行大括号中的代码。如果没有拿到小括号里面的对象锁,就会一直排队等待这把锁,直到拿到这个锁再占有它并执行大括号中的代码。

二(不灵活、对象锁)、在实例方法上使用synchronized:
1、此时一定锁的是this
2、整个方法体都被同步了,可能会无故扩大同步的范围,导致程序的执行效率降低。
3、举例
public synchronized void withdraw(double money){
....
}

三(类锁)、在静态方法上使用synchronized:
1、表示找类锁。
2、作用:保证静态变量的安全
3、类锁和对象锁的区别:
1个对象对应1把锁,100个对象100把锁;
1个类对应1把锁,就算这个类创建了n个对象,类锁也就这一把。

全部评论

相关推荐

10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务