版权声明: https://blog.csdn.net/qq_29166327/article/details/82933259
2018年10月03日
目录
前言
java中已经有了内置锁:synchronized,synchronized的特点是使用简单,一切交给JVM去处理,不需要显示释放;
java中,每个对象都有一个对象锁与之关联,该锁表明:任何时候只允许被一个线程所拥有,当一个线程调用对象的一段synchronized代码时,需要先获取这个锁,然后执行代码,执行结束后,释放锁。
作为对象锁,内置锁,synchronized 有两种使用方法:synchronized 方法 和 synchronized 块;此外还可以用于静态方法、类或某个实例,但是者都将会对程序执行有很大影响。
1)synchronized 方法
方法声明加入synchronized关键字。
public synchronized void mutiThreadAccess(){
//synchronized 方法
//好处:保证这个方法同一时刻只能被一个线程访问,从而保证多线程访问的安全性;
//弊端:当一个方法体的代码规模非常大,方法声明为synchronized 会大大影响程序的执行效率。为了提高程序的效率,java提供了synchronized块。
}
2)synchronized 块
灵活性较高,可以指定上锁的对象。
public void synchronizedBlock(){
synchronized(this){
//synchronized 代码块
//可以将任意代码段声明为synchronized
}
ConcurrentHashMap syncObject = new ConcurrentHashMap();
synchronized(syncObject){
//synchronized 代码块给对象上锁
//可以指定上锁的对象
}
}