赞
踩
synchronized是Java的一个关键字,它能够将代码块(方法)锁起来
只要在代码块(方法)添加关键字synchronized,即可以实现同步
synchronized是一种互斥锁
synchronized是一种内置锁/监视器锁
同步代码块:
同步方法(在这看不出来需要看JVM底层实现)
synchronized底层是通过monitor对象,对象有自己的对象头,存储了很多信息,其中一个信息标示是被哪个线程持有。
synchronized一般我们用来修饰三种东西:
synchronized修饰静态方法获取的是类锁(类的字节码文件对象),synchronized修饰普通方法或代码块获取的是对象锁。
内置锁的可重入性,锁的持有者是线程
JDK1.6开始Synchronized锁就做了各种的优化:
到现在Lock锁和Synchronized锁的性能其实差别不是很大!而Synchronized锁用起来又特别简单。Lock锁还得顾忌到它的特性,要手动释放锁才行(如果忘了释放,这就是一个隐患)
所以说,我们绝大部分时候还是会使用Synchronized锁,用到了Lock锁提及的特性,带来的灵活性才会考虑使用Lock显式锁。
公平锁理解起来非常简单:
非公平锁就是:
Lock和synchronize都是默认使用非公平锁的。如果不是必要的情况下,不要使用公平锁
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。