java关键字之synchronized

Posted Mars.wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java关键字之synchronized相关的知识,希望对你有一定的参考价值。

1.synchronized可以用了修饰一个普通方法,或者代码块,这个时候synchronized锁定的是当前对象,只要有一个线程在访问对应的方法或代码块,其他线程必须等待。
2.synchronized只对修饰的方法有效,锁定对象的其他非synchronized方法还是可以访问的
3.synchronized也可以用来锁定指定对象,当一个线程访问指定对象时,其他试图访问指定对象的线程将会阻塞,直到该线程访问指定对象结束
4.synchronized可以用了修饰一个静态方法,静态方法是属于类的而不属于对象的。同样的,synchronized修饰的静态方法锁定的是这个类的所有对象
5.synchronized(*.class)效果跟锁定静态方法相同,都是锁定这个类的所有对象。

总结

A. 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用对象是静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。 
B. 每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。 
C. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。

 

修饰内容锁类型示例
修饰代码块 任意对象锁 示例四
修饰普通方法 this锁 示例五
修饰静态方法 类锁 示例六






以上是关于java关键字之synchronized的主要内容,如果未能解决你的问题,请参考以下文章

synchronized 加在java方法前面是啥作用

要想学好Java编程,构造器方法重载this关键字垃圾回收机制,这4关一定要过!

volatile和synchronized关键字

每日一问:谈谈 synchronized 和 CAS 机制

单例模式

JAVA篇之环境安装(Windows)