与Java级联同步

时间:2011-05-07 10:27:30

标签: java multithreading data-structures synchronization

我非常努力地搜索有关该问题的信息,但没有任何相关内容。 任何贡献将不胜感激。

DataStructure ds = new DataStructure();
public synchronized void run() { b(); }
private void b() { ds.update(); }
public synchronized void c() { ds.update(); }

假设上面的代码是使用线程实现的。 你可能会注意到,有一个DataStructure对象正在通过synchronized方法共享和访问,当在任何给定时间只能调用一个synchronized方法时(我没有记错。对吧?)。 是否有可能以不同步的方式通过公共方法访问DataStructure对象?

感谢。

3 个答案:

答案 0 :(得分:0)

您的代码不完整,但如果以上是RunnableThread的一部分,则由于您正在同步整个run()方法,因此无法使用给定方法实现并发。在这种情况下,使用线程是毫无意义的。

我也看不到线程之间共享DataStructure的位置 - 看起来像是为每个线程创建一个单独的线程。如果它实际上是共享的,那么访问将不会同步,因为您在RunnableThread而不是共享对象上进行同步。

答案 1 :(得分:0)

没有看到更多代码,很难说清楚。这些方法属于哪个类?他们是如何被调用的,以及通过什么类?

并发问题很难诊断,如果没有足够的信息则更难。

我假设您拥有执行上述run()方法的线程,并且有不同的线程执行c()方法。同步发生在上述方法所在的类上,因此不存在任何问题(如果线程很多,则除了缓慢)。

答案 2 :(得分:0)

如果

  1. 除了您在此处所写的内容之外,没有其他公共方法可以访问ds和
  2. 您正在讨论的“DataStructure对象”是您的类的特定对象实例中的对象实例(而不是所有DataStructure对象)
  3. 那么你所期待的是正确的。不应该通过类的公共方法同时访问ds。

    老实说,我没有看到你的课程中有什么特别的东西与正常的同步方法示例不同。