标签:静态 height 相关 pre 实现 head 代码 系统 syn
1.synchronized可以用了修饰一个普通方法,或者代码块,这个时候synchronized锁定的是当前对象,只要有一个线程在访问对应的方法或代码块,其他线程必须等待。
2.synchronized只对修饰的方法有效,锁定对象的其他非synchronized方法还是可以访问的
3.synchronized也可以用来锁定指定对象,当一个线程访问指定对象时,其他试图访问指定对象的线程将会阻塞,直到该线程访问指定对象结束
4.synchronized可以用了修饰一个静态方法,静态方法是属于类的而不属于对象的。同样的,synchronized修饰的静态方法锁定的是这个类的所有对象
5.synchronized(*.class)效果跟锁定静态方法相同,都是锁定这个类的所有对象。
总结
A. 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用对象是静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。
B. 每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。
C. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
修饰内容 | 锁类型 | 示例 |
---|---|---|
修饰代码块 | 任意对象锁 | 示例四 |
修饰普通方法 | this锁 | 示例五 |
修饰静态方法 | 类锁 | 示例六 |
标签:静态 height 相关 pre 实现 head 代码 系统 syn
原文地址:https://www.cnblogs.com/wangbin2188/p/9293739.html