另一个线程内的Java同步

时间:2012-02-13 04:30:33

标签: java

我有一个关于Java同步的快速问题。

请假设以下代码:

public class Test {
    private String address;
    private int age;

    public synchronized setAddress(String a) {
        address = a;
    }

    public synchronized setAge(int a) {
        age = a;
    }

    public synchronized void start() {
          ...

          listener = new Thread(new Runnable(){
              public void run() {
                      ...
                  setAge(10);
                      ...

                  synchronized(Test.this) {
                      address = null;
                  }
              }
          }
    }
}

当在另一个线程中调用synchronized方法或synchronized块时,我对Java同步有点不确定。

假设线程运行类Test为A,和 监听线程B。

然后,如果我执行上面的代码,它是否保证同步方法调用和synchronized块与A(运行Test类的线程)同步?

感谢您的阅读。

1 个答案:

答案 0 :(得分:3)

没有

同步方法锁定Test 实例,而同步块锁定Test 类对象

请参阅Java synchronized static methods: lock on object or classJava Synchronized Block for .class