我有一个关于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类的线程)同步?
感谢您的阅读。
答案 0 :(得分:3)
没有
同步方法锁定Test
实例,而同步块锁定Test
类对象。
请参阅Java synchronized static methods: lock on object or class和Java Synchronized Block for .class