Java內建鎖synchronized的可重入性
當執行緒請求一個由其它執行緒持有的物件鎖時,該執行緒會阻塞,而當執行緒請求由自己持有的物件鎖時,如果該鎖是重入鎖,請求就會成功,否則阻塞.
我們來看看synchronized,它擁有強制原子性的內建鎖機制,是一個重入鎖,所以在使用synchronized時,當一個執行緒請求得到一個物件鎖後再次請求此物件鎖,可以再次得到該物件鎖,就是說在一個synchronized方法/塊的內部呼叫本類的其他synchronized方法/塊時,是永遠可以拿到鎖,如下:
01 |
public class Child extends Father
{ |
02 |
public static void main(String[]
args) { |
03 |
Child
child = new Child(); |
04 |
child.doSomething(); |
05 |
} |
06 |
07 |
public synchronized void doSomething()
{ |
08 |
System.out.println( "child.doSomething()" ); |
09 |
doAnotherThing(); //
呼叫自己類中其他的synchronized方法 |
10 |
11 |
} |
12 |
13 |
private synchronized void doAnotherThing()
{ |
14 |
|