2011-03-29 64 views
1

我有三種方法都可以訪問文件夾中的相同文件。 我用PersistenceStrategy com.thoughtworks.xstream.persistence.XmlArrayListjava howto通過一組方法同步

的事情是,很多線程可以不寫,讀,使用任何四種方法 女巫所有被同步刪除。同步不會停止一個方法中的READ,因爲這兩個方法都是單獨同步的,所以在另一個方法中與WRITE衝突 。

想着如果我把它們全部放在一個類中,並以某種方式在類上同步?

有什麼想法?

回答

4

在MyClass.class實例上進行同步是可以接受的,但在許多情況下,最好使用私有鎖而不是可以在外部訪問的東西。因此,您可以創建一個私有最終(如果需要,則爲靜態)實例,並將其鎖定在同步塊中。

private final Object lock = new Object(); 
+0

謝謝你現在試試 – Erik 2011-03-29 08:20:01

+0

很難測試我的工作原理,因爲這種情況下的錯誤很難模擬。我認爲這是正確的做法。 通過以下方法進行同步:private final PeLock per = new PeLock(); (per){ on = per.loadUserData(「name」); } – Erik 2011-03-29 08:32:51

+0

不使用特定的類型,鎖只需要是私有的,所以'Object()'很好。 'public class MyClass {private final lock = new Object(); public void syncMe(){synchronized(lock){do stuff();}}}'鎖是一個靜態或實例變量,取決於您的需要。 – 2011-03-29 11:54:59