栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

同步(此)阻止整个对象?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

同步(此)阻止整个对象?

您似乎在混合事物。

首先

public synchronized void method() {}

从同步角度看,它等效于:

public void method() {    synchronized (this) {    }}

优点/缺点已被提及,各种重复项提供了更多信息。

其次,

synchronized(someObject) {    //some instructions}

意味着同步块中的指令不能由2个线程同时执行,因为它们需要先获取监视器

someObject
。(假设someObject是不变的最终引用)。

就您而言,

someObject
恰好是
this

对象中任何未同步的代码仍可以并发执行,即使监视器处于

this
运行状态,因为该线程正在运行同步块,即使该监视器处于打开状态。换句话说,
synchronized(this)
不“锁定整个对象”。它仅防止2个线程同时执行同步块。

最后,如果您有两个

synchronized
方法(都
this
用作锁),如果一个线程(T1)获得
this
执行这两个方法之一的锁,则不允许其他线程执行这两个方法中的
任何 一个,因为它们需要获取
this
T1已经持有的锁。

这种情况可能会在关键部分中引起争用,在这种情况下,必须使用更细粒度的锁定策略(例如,使用多个锁定)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/455002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号