当前位置: 首页 > 面试题库 >

混合synced()与ReentrantLock.lock()

阎晋
2023-03-14
问题内容

在Java中,这样做ReentrantLock.lock()ReetrantLock.unlock()使用相同的锁定机制synchronized()

我的猜测是“不”,但我希望是错的。

例:

想象一下,线程1和线程2都可以访问:

ReentrantLock lock = new ReentrantLock();

线程1运行:

synchronized (lock) {
    // blah
}

线程2运行:

lock.lock();
try {
    // blah
}
finally {
    lock.unlock();
}

假设线程1首先到达其部分,然后在线程1完成之前到达线程2:线程2将等待线程1离开该synchronized()块,还是继续运行?


问题答案:

不,lock()即使线程1
synchronized在同一线程上,线程2也可以lock。这是文档必须说的:

请注意,Lock实例只是普通对象,它们本身可以用作同步语句中的目标。获取Lock实例的监视器锁与调用该实例的任何lock()方法没有指定的关系。建议避免混淆,除非在自己的实现中使用,否则不要以这种方式使用Lock实例。



 类似资料:
  • 当以下转换在将RDD写入文件之前执行时,它们之间有什么区别? 聚结(1,洗牌=true) 合并(1,洗牌=假) 代码示例: 它与collect()相比如何?我完全知道Spark save方法将以HDFS风格的结构存储它,但我更感兴趣的是collect()和shuffled/non shuffled coalesce()的数据分区方面。

  • OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的颜色还包含了玻璃之后所有物体的颜色。这也是混合这一名字的出处,我们混合(Blend)(不同物体的)多

  • 想改进这个问题吗 通过编辑这篇文章,更新问题,以便用事实和引文来回答。 我想知道混合和本地移动开发之间的区别。我在Android系统方面只有相当的经验,所以在这两种情况下,我都会学到一些新东西。 我的项目只是一个仅由4个页面组成的移动应用程序,只是从网站上获取一些文章而已。 在这种情况下,混合开发会更好还是只坚持原生?! 性能方面哪个更好? phonegap/cordova学习曲线呢? 如果我要混

  • 看过 angular2 的人基本都知道,它大量使用了装饰器,而装饰器还属于 ecmascript 的征集意愿的第一阶段。 使用装饰器,需要在 tsconfig.json 里面开启支持选项 experimentalDecorators // tsconfig.json "experimentalDecorators": true 装饰器基本可以对所有变量起作用,它的语法是 @装饰器 ,这个装饰器必须

  • 本文向大家介绍BAT与HTML混合编程写法,包括了BAT与HTML混合编程写法的使用技巧和注意事项,需要的朋友参考一下 核心代码

  • 问题内容: 我倾向于只对路径(’/’)使用正斜杠,而python在Windows上也很满意。在os.path.join的描述中,它说的是跨平台的正确方法。但是当我使用它时,我会得到混合的斜杠: 这个对吗?我应该稍后检查并更正它,还是有更好的方法? 谢谢 编辑:询问路径时,我也会得到斜杠 问题答案: 现在,您自己提供了一些斜线,让其他人选择。最好让python选择所有它们,或者自己提供它们。Pyth