【问题标题】:When a Thread acquires a lock are others able to invoke other methods? [duplicate]当一个线程获得锁时,其他人是否能够调用其他方法? [复制]
【发布时间】:2017-03-08 00:31:19
【问题描述】:

每个 java 对象都有一个内置的锁。 因此,如果多个线程之一想要调用同步方法,它会获取对象的锁。

假设我们有一个对象和两个线程,t1t2

t1 线程请求对象的锁以调用同步方法object.methodA()。同时t2要求对象的锁调用同步方法object.methodB()

这可以吗?

两个线程有​​可能为两种不同的方法获取锁吗? (想象一个理想的场景,methodA() 和 methodB() 不对同一个对象字段进行操作)

如果不是,您是在告诉我,当一个线程获得锁时,其他线程都无法调用其他同步方法,即使是那些不花费诸如写入对象字段等问题的方法...

【问题讨论】:

标签: java concurrency synchronization locking


【解决方案1】:

创建方法synchronized 只是您可以控制访问的方法之一。多个线程不能同时调用单个对象的synchronized方法(前提是它们都是相同的静态或非静态),所以如果你需要更高级的控制,还有很多其他的并发机制比如@ 987654321@.

【讨论】:

  • 所以答案是否定的。谢谢
  • 好吧,如果你想这样看的话。在这个时代,我会考虑使用synchronized 代码味道,因为有很多更有效、更有效和更容易实现最终结果的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2015-01-09
  • 2012-08-06
  • 1970-01-01
相关资源
最近更新 更多