Java 中的synchronized锁代码块的时候需不需要这个类是单例
本文介绍了Java 中的synchronized锁代码块的时候需不需要这个类是单例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
那问题来了,如果两个线程访问的是这个对象的不同实例,还会阻塞吗?
解决方案
那问题来了,如果两个线程访问的是这个对象的不同实例,还会阻塞吗?
答案是不会阻塞,也就是必须是同一个对象,synchronized方法或者synchronized(this)才会阻塞。
不过如果是synchronized static方法,或者synchronized(this.class)这样的写法,就相当于全局锁,对象实例无关。
说白了,synchronized(obj)锁住的是括号中的对象,如果不是同一个对象则不会阻塞。
可以参考
http://xxgblog.com/2012/11/15...
http://xxgblog.com/2013/05/16...
这篇关于Java 中的synchronized锁代码块的时候需不需要这个类是单例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文