矢量包含同步方法,ArrayLists不包含。這些同步方法有助於防止數據被大於1線程訪問和修改時的數據損壞。矢量與ArrayList同步的示例
有人可以解釋這個更詳細的我嗎?這意味着Vectors包含同步方法是什麼意思?這些方法是否包含內部鎖,用於控制多線程訪問數據的鎖定和解鎖?有人可以提供一些使用向量(與ArrayList)的地方的例子,可以防止數據損壞,並解決問題或數據結構和同步問題?
感謝您的時間和幫助。
矢量包含同步方法,ArrayLists不包含。這些同步方法有助於防止數據被大於1線程訪問和修改時的數據損壞。矢量與ArrayList同步的示例
有人可以解釋這個更詳細的我嗎?這意味着Vectors包含同步方法是什麼意思?這些方法是否包含內部鎖,用於控制多線程訪問數據的鎖定和解鎖?有人可以提供一些使用向量(與ArrayList)的地方的例子,可以防止數據損壞,並解決問題或數據結構和同步問題?
感謝您的時間和幫助。
這是什麼意思,矢量包含同步方法?
該方法已被標記爲。
這些方法是否包含控制多線程訪問數據鎖定和解鎖的內部鎖?
否,儘管關鍵字正對的方法,它是對象被鎖定,而不是方法。沒有辦法像這樣鎖定方法。
有人可以提供一些使用向量(vs.ArrayList)可以防止數據損壞並在這個問題或數據結構和同步問題上更多的光線的例子嗎?
有很多例子。最簡單的是遞增一個數字。假設你有兩個線程遞增一個數字(例如集合的大小),沒有你可以擁有的同步。
Thread1: read size e.g. 0
Thread1: increment size
Thread1: write size e.g. 1
Thread2: read size e.g. 1
Thread2: increment size
Thread2: write size e.g. 2
然而,由於線程可以以任意順序執行操作(因爲這是線程的整點),你也可以有
Thread1: read size e.g. 0
Thread2: read size e.g. 0
Thread1: increment size
Thread2: increment size
Thread1: write size e.g. 1
Thread2: write size e.g. 1
因此,即使兩個線程都遞增計數器,這是不正確因爲他們的行爲不協調。這是同步爲你做的。
,當你說對象被鎖定時,是不是表示該方法包含這些鎖?而且,在你給出的例子中,讀取,增量和寫入方法是否包含同步關鍵字? – Stranger
@Stranger請參閱此處的示例:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Vector.java#Vector.add%28java。 lang.Object%29這是Peter編寫的用synchronized關鍵字標記的方法。該方法本身不包含任何鎖定。 – Fildor
Fildor,幫我在這裏。基於彼得的例子,他是否認爲讀取,增量和寫入方法在其方法定義中包含「同步」關鍵字? – Stranger
我會建議閱讀oracle java併發教程,非常有幫助! – jtahlborn
有些消息來源不鼓勵使用Vector,而是推廣使用「java.util.concurrent。*」中的實現。或者對第二個問題的答案使用'Collections.synchronizedXXX' – Fildor