用法解釋
synchronized是Java中的關鍵字,是一種同步鎖。它修飾的對象有以下幾種:
1. 修飾一個代碼塊,被修飾的代碼塊稱為同步語句塊,其作用的範圍是大括号{}括起來的代碼,作用的對象是調用這個代碼塊的對象;
2. 修飾一個方法,被修飾的方法稱為同步方法,其作用的範圍是整個方法,作用的對象是調用這個方法的對象;
3. 修飾一個靜态的方法,其作用的範圍是整個靜态方法,作用的對象是這個類的所有對象;
4. 修飾一個類(Person.class),其作用的範圍是synchronized後面括号括起來的部分,作用的對象是這個類的所有對象。
原因解釋
java的對象鎖和類鎖:java的對象鎖和類鎖在鎖的概念上基本上和内置鎖是一緻的,但是,兩個鎖實際是有很大的差別的,對象鎖是用于對象執行個體方法,或者一個對象執行個體上的,類鎖是用于類的靜态方法或者一個類的class對象上的。我們知道,類的對象執行個體可以有很多個,但是每個類隻有一個class對象,是以不同對象執行個體的對象鎖是互不幹擾的,但是每個類隻有一個類鎖。
對象的内置鎖和對象的狀态之間是沒有内在的關聯的,雖然大多數類都将内置鎖用做一種有效的加鎖機制,但對象的域并不一定通過内置鎖來保護。當擷取到與對象關聯的内置鎖時,并不能阻止其他線程通路該對象,當某個線程獲得對象的鎖之後,隻能阻止其他線程獲得同一個鎖。之是以每個對象都有一個内置鎖,是為了免去顯式地建立鎖對象。是以synchronized隻是一個内置鎖的加鎖機制,當某個方法加上synchronized關鍵字後,就表明要獲得該内置鎖才能執行,并不能阻止其他線程通路不需要獲得該内置鎖的方法。