我想在另一个同步语句中运行一个方法。两个同步语句。他们如何工作?
MyClass的
public class MyClass {
private Object lockObject = new Object();
public void testFirst() {
synchronized (lockObject) {
System.out.println("Entered testFirst() sync");
testSecond();
System.out.println("Leaving testFirst() sync");
}
}
private void testSecond() {
synchronized (lockObject) {
System.out.println("Entered testSecond() sync");
}
}
}
主
package com.replanet;
public class Main {
public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.testFirst();
}
}
输出
Entered testFirst() sync
Entered testSecond() sync
Leaving testFirst() sync
我预期另一个输出。
Entered testFirst() sync
Leaving testFirst() sync
Entered testSecond() sync
为什么不会testSecond()
等到testFirst()
完成它的工作吗?
+1供ICP参考。 – L0j1k 2013-02-25 11:26:04
你很自然地不理解锁。 请阅读:http://docs.oracle.com/javase/tutorial/essential/concurrency/ – fredcrs 2013-02-25 11:34:20
@fredcrs,谢谢。我会阅读文档。我正在阅读Fred Long撰写的名为“Java并发指南”的书。 – 2013-02-25 13:22:36