Java线程锁

时间:2011-02-02 17:56:14

标签: java multithreading synchronization

如果正在运行的线程访问某个特定对象,那么它还会锁定该特定对象的字段成员吗?

4 个答案:

答案 0 :(得分:5)

您是否明确锁定了对象?您使用的是synchronized吗?

对某个对象进行锁定并不意味着锁定其成员。

答案 1 :(得分:1)

  

同步是围绕称为内部锁或监视器锁的内部实体构建的。 (API规范通常将此实体简称为“监视器”。)内部锁在同步的两个方面都发挥作用:强制对对象状态进行独占访问,并建立对可见性至关重要的先发生关系。

答案 2 :(得分:1)

锁只是一个锁,它唯一保证的是一次只有一个线程可以拥有它。您可以编写代码来确保您想要锁定的内容实际上已被锁定。

所以如果你写:

class MyClass {
  private int myvalue;
  public synchronized void setValue(int newvalue) {
    myvalue = newvalue;
  }
}

然后确保只有一个线程可以写入myvalue。但是,如果您要将myvalue公开或提供另一种写入方式,那么没有什么能阻止其他线程同时写入myvalue。编码逻辑取决于你。

答案 3 :(得分:0)

如果你锁定了有问题的对象,那么另一个线程显然无法获得锁定,但这并不会限制字段成员被更改或修改。