【问题标题】:Java Multi threading , synchronization conceptJava 多线程、同步概念
【发布时间】:2016-03-10 20:14:36
【问题描述】:

我有一个类,它具有三个方法 m1、m2 和 m3。并且方法 m1,m3 是同步的。

创建了三个线程,比如说 t1、t2 和 t3。

问题来了 如果 t1 正在访问 m1 方法,同时 t2 可以访问 m3 方法吗? (m1 和 m3 方法都是同步的)。

我没有代码。在我最近的采访中遇到了这个问题。

【问题讨论】:

  • No 如果 t1 和 t2 都在同一个实例上工作。 Yes,如果 t1 和 t2 正在处理您定义了这些方法的类的两个不同实例。
  • 试着把问题描述改得更具体一点

标签: java multithreading synchronization


【解决方案1】:

如果 m1 和 m3 都是实例方法而不是静态方法:

这取决于 t1 和 t2 是否共享同一个类的对象。如果它们共享同一个对象,则 t1 和 t2 不能同时调用同步方法。否则,如果 t1 和 t2 具有您的类对象的不同副本,则可以同时调用 m1 和 m3,因为它们是 2 个不同的对象。

但是,如果 m1 和 m3 都是静态的: 没有 2 个线程可以同时调用它们。这是因为,静态方法在 YourClass.class 对象上同步,该对象由类的所有实例共享。因此,多个线程不能同时访问它的同步方法/块。

【讨论】:

  • 如果您觉得我已经回答了您的问题,请接受并点赞。以这种方式感谢我:)
猜你喜欢
  • 2014-06-30
  • 2014-02-25
  • 2013-09-07
  • 2018-12-18
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多