這個問題來自Java實踐中的併發實例。在本書的第二章中,我們得到了一個這樣的例子,我沒有完全複製它。比方說,我們的代碼同步方法override-線程獲取鎖定哪個對象?
class A{
synchronized void method1(){
do some stuff..
}
}
class B extends A{
synchronized void method1(){
super.method1();
}
}
以下塊現在我們創建B類的一個對象,並做下面的事情,這正好在公共靜態無效的主要。
B b=new B()
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
b.method1();
}
});
Thread t2=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
b.method1();
}
});
而隨後啓動的t1和t2的線程。
這裏,我的問題是:
正如我在這裏同步方法對哪些對象線程獲得鎖?我只創建對象B和B的「方法一」我能想到的線程獲取關於B對象的鎖,但在執行以下代碼
super.method1()
和控制隨後達到超類的方法1在哪個對象上獲取鎖?因爲我沒有創建任何A級對象。
- 而這種行爲又如何與Reentrancy相關?
如何發佈實際編譯的代碼?沒有什麼能夠讓你的線程調用'method1',或者確實使用'B'的實例。這反過來掩蓋了你的問題,所以它不知道你在問什麼,也不可能回答。 –
道歉,更正。 –
不包括分號。你真的編譯和運行你發佈的代碼嗎? –