2013-04-11 58 views
-1

在一個Java採訪時有人問了上下文線程有一個ABC類包括兩個靜態同步方法m1()m2(),並有兩個線程T1T2,如果T1呈現出鎖方法m1()然後在同一時間有可能是T2採取鎖m2()方法,我回答說,因爲m1()m2()是靜態的同步,所以,所以如果T1線程需要的鎖m1()方法則沒有其他線程他們有一流水平的鎖可同時鎖定m1(),直至T1從0123解鎖方法,但同時線程T2可以鎖定方法m2(),請告知它是正確的。關於一流水平鎖定

回答

1

一對方法在Java中沒有獲取鎖,而是在對象。同步的靜態方法隱式使用類對象作爲鎖。自然,同一個類中的兩個方法都會爭用相同的鎖,並且不會被允許同時執行。

+0

非常感謝你的完美探索,你可以請任何示例顯示此建議,所以這將有助於掌握更多。提前感謝。 – 2013-04-11 11:16:57

2

錯誤的...在一個同步方法塊鎖定所有其他同步方法調用

+0

所以你的意思是說,如果T1線程在靜態同步方法m1()上接受一個類級鎖定,那麼同時線程T2不能鎖定另一個靜態同步方法m2(),因爲線程T1已經把類級鎖在方法m1()上,你可以用一個小例子來展示一下,以便掌握更多。提前致謝。 – 2013-04-11 10:53:00

+0

是的......我不能給你一個比你寫的更多的數據記錄的例子。只要試圖補充它,如果你想,你會看到... – jamp 2013-04-11 11:01:14