多线程同步synchronized问题

在多线程同步的时候,synchronized(object ){//同步代码块},其中同步的代码块和加锁的对象object有必然关系吗?他们关系怎样?

3个回答

没有关系!
synchronized(object ){
//同步代码块
}
表示只有当前这个对象拿到object这个对象的锁才能执行同步代码块中的代码
每一个对象有一个对象锁,但是每一个对象只有一个Class锁

没必然关系,当线程访问时会在object上做一个已被访问的标记,这样其他线程来访问时就可以判断这个同步块是否被使用.一般使用synchronized(this)是为了防止object被重复使用

synchronized(object)中的object使用什么决定了锁定的范围,通常可能会简单的使用this。但是这样就把锁定范围扩大到整个实例上,但实际需求可能并不要求这样。应该根据实际上需求,灵活决定哪些属性需要公用锁,而另外的一些属性用其他的锁。

可以使用互斥体这个词,在类中定义多个变量,每个变量是一把锁,没一把锁负责维护某部分属性的同步即可。

但如果你的类设计的非常的内聚,所有属性的关系都是非常密切的,则可能就只需要一把锁了this.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问