我想在另一個同步語句中運行一個方法。兩個同步語句。他們如何工作?
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