3
在調用plain()方法之前,同步sync()方法中的以下代碼塊。爲什麼會這樣呢,不應該只對同步方法調用內部鎖塊 - 例如,如果同時使用了plain(),這種行爲也會很好。同步方法執行時,非同步方法是否阻塞
由於java使用的監視器概念僅適用於同步的方法/塊 - 它的定義不應影響非同步代碼的執行。情況總是如此,或者這種行爲是特定於JVM實現的。
public class Main {
public static void main(final String[] args) {
final Main main = new Main();
new Thread(new Runnable() {
@Override
public void run() {
main.sync();
}
}).run();
main.plain();
}
public synchronized void sync() {
try {
System.out.println("sleeping...");
Thread.sleep(2000);
System.out.println("out...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void plain() {
System.out.println("plain...");
}
}
輸出:
sleeping...
out...
plain...
哦天啊..我做了什麼..謝謝!! – haps10
@ haps10它碰巧是我們最好的:-) – maba