我們設想某個執行緒獨佔某個類,必須執行完才能再次建立物件
預期輸出以下結果
物件鎖示例:
/**
* 關鍵字synchronized取得的鎖都是物件鎖,而不是把一段**(方法)當做鎖,
* 所以**中哪個執行緒先執行synchronized關鍵字的方法,哪個執行緒就持有該方法所屬物件的鎖(lock),
* * 在靜態方法上加synchronized關鍵字,表示鎖定.class類,類一級別的鎖(獨佔.class類)。
*@author lcx
* */
public
class
multithread else
system.out.println("tag " + tag + ", num = " + num);
} catch (interruptedexception e)
}//注意觀察run方法輸出順序
public
static
void
main(string args)
});
thread t2 = new thread(new runnable()
});
t1.start();
t2.start(); }}
執行一次輸出結果:
類鎖示例:
類鎖獨佔類
/**
* 關鍵字synchronized取得的鎖都是物件鎖,而不是把一段**(方法)當做鎖,
* 所以**中哪個執行緒先執行synchronized關鍵字的方法,哪個執行緒就持有該方法所屬物件的鎖(lock),
* * 在靜態方法上加synchronized關鍵字,表示鎖定.class類,類一級別的鎖(獨佔.class類)。
*@author lcx
* */
public
class
multithread else
system.out.println("tag " + tag + ", num = " + num);
} catch (interruptedexception e)
}//注意觀察run方法輸出順序
public
static
void
main(string args)
});thread t2 = new thread(new runnable()
});
t1.start();
t2.start();
}
}
執行一次輸出結果:
多執行緒的物件鎖和類鎖
今天面試官問了乙個問題,如果在乙個類中的普通方法加上synchronized 關鍵字,兩個執行緒可以同步方法這個方法嗎?為什麼 當時回答是不可以同步,然後面試官確認我說一定嗎?當時就知道回答錯了。現在實現了下,原來是類鎖和物件鎖的區別所在,也算是普及了下相關知識吧。類鎖 就是在方法前面加上 stat...
Java多執行緒 鎖物件
前面總結了多個執行緒訪問同乙個物件的同步方法以同步執行,多個執行緒訪問多個物件的同步方法則以非同步方式執行,那如果多個執行緒分別訪問乙個物件中同步方法和非同步方法會如何執行那?demo myobject類 包含了乙個同步方法和乙個非同步方法 public class myobject catch i...
Java類鎖和物件鎖實踐
一 前言 1.類鎖 在 中的方法上加了static和synchronized的鎖,或者synchronized class 的 段,如下文中的increament 2.物件鎖 在 中的方法上加了synchronized的鎖,或者synchronized this 的 段,如下文中的synonmeth...