Я хочу иметь общую коллекцию потоковой безопасности, и я увидел, что Arraylist можно легко использовать потокобезопасность по его статическому синхронному методу, но что меня беспокоит, что этот ArrayList не является общим, поэтому, когда я хочу использовать свои объекты, у меня всегда есть чтобы бросить их. Есть ли более простой способ сделать это? Также возможны другие типы списков.Threadsafe и общий arraylist?
ответ
Немного знаний опасная вещь ;-) Да, вы могли бы использовать предложение Meta-Knight и использовать SyncRoot
, но вам нужно быть осторожным - это не панацея. См. this post из блога Team BCL от Microsoft, чтобы понять, почему это не так просто, как SyncRoot
. Цитаты из этого поста:
Несколько проницательных пользователей наших общих коллекций заметили, что мы больше не обеспечить общественную
SyncRoot
собственности наICollection<T>
и
Я не думаю, что мы «Лучше заставлять людей больше думать о синхронизации , и, честно говоря,
SyncRoot
Недвижимость на нашем общем собрании не дает никакой ценности.
Конечно, это не означает, что его нельзя использовать ни при каких обстоятельствах - вам просто нужно тщательно подумать о случаях использования и не быть на автопилоте.
Если вы читали на MSDN относительно синхронизированного метода до сих пор говорит, что это:
«Перечислив через коллекцию внутренне не процедура потокобезопасной Даже если коллекция синхронизирована, другие потоки могут по-прежнему изменять коллекцию. , что заставляет перечислитель вызывать исключение. Чтобы гарантировать безопасность потока во время перечисления, вы можете заблокировать сбор во время всего перечисления или уловить исключения, возникающие в результате изменений, сделанных другими потоками ».
Вы можете создать обертку List (T) и синхронизировать доступ с свойством SyncRoot.
MSDN пример:
ICollection ic = ...;
lock (ic.SyncRoot)
{
// Access the collection.
}
- 1. Общий класс ArrayList?
- 2. Form.Show() и Form.Visible ThreadSafe
- 3. Удалить узел из Arraylist (общий и специфический)
- 4. ArrayList сравнивает и получает общий доступ
- 5. Threadsafe foreach перечисление списков
- 6. Общий массив в массиве ArrayList
- 7. Многопоточное приложение и списки Threadsafe
- 8. Статические методы и приложения ThreadSafe
- 9. Функция реентера и ThreadSafe Примеры
- 10. ResultSet threadsafe?
- 11. Threadsafe UITableView
- 12. Свойства Threadsafe
- 13. ArrayDescriptor threadsafe?
- 14. ThreadSafe Property
- 15. общий класс с ArrayList, содержащей ссылку на общий класс сам
- 16. Общий метод определения порядка ArrayList (Java)
- 17. Вставьте в общий номер ArrayList Java
- 18. Private ArrayList, общий для всех членов класса
- 19. EJB threadsafe Singleton bean VS EJB threadsafe Факт бездействия
- 20. Общий метод для преобразования массива в ArrayList
- 21. Как добавить общие элементы в общий ArrayList?
- 22. Как сделать общий тип ArrayList статическим?
- 23. Threadsafe logging using streams
- 24. Is wxHTTP :: getinputstream() threadsafe?
- 25. Коллекция Threadsafe без блокировки
- 26. PureLayout is not threadsafe
- 27. Как сделать Stack.Pop threadsafe
- 28. Threadsafe observer pattern
- 29. VB.NET RaiseEvent, threadsafe?
- 30. Is SynchronizationContext.Post() threadsafe?
и да, я мог бы обернуть ArrayList, возможно, любыми другими решениями? :) –