synchronized关键字的理解
用synchronized关键字修饰的方法叫同步方法,它是用来做同步操作的。很多面试者认为 synchronized锁定的是代码块,其实不然。它锁定的是调用当前方法的对象。
比如,多个线程同时执行demo对象的b方法时:
线程tl执行demo.b()
线程t2执行demo.b()
实际上,tl和t2两个线程需要去竞争demo对象的锁,谁竞争到锁,谁就先执行,而另一个 则后执行。demo对象的锁是不容易被编程者感知的。但作为一个合格的程序员,你要知道这 背后的机制。
在Java中,Jvm会为每个对象内置一个监视器(monitor),监视器中有一个地方叫监视区域, 任何线程要想执行这个对象的synchronized方法,都必须先进入到该对象的监视区域。监视 器负责保证同一时刻只有一个线程在监视区域执行。
正是由于监视器机制的存在,synchronized才得以发挥其作为同步关键字的作用。
Was this helpful?
0 / 0