多线程学习(5):synchronized 的基础使用

版权声明: https://blog.csdn.net/qq_29166327/article/details/82933259

2018年10月03日

目录

前言

1)synchronized 方法

2)synchronized 块


前言

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 代码块给对象上锁
			//可以指定上锁的对象
		}
	}

猜你喜欢

转载自blog.csdn.net/qq_29166327/article/details/82933259