Подумайте об использовании ReaderWriterLock, если у вас есть много потоков , которые только должны читать данные , и эти потоки блокируются в ожидании блокировки, и вам не нужно часто изменить данные.
Однако ReaderWriterLock может заблокировать поток, который ожидает записи в течение длительного времени.
Поэтому используйте ReaderWriterLock только после того, как подтвердите , вы получите высокий уровень конкуренции для блокировки в « реальной жизни » и подтвердили, что не можете изменить дизайн Ваша конструкция блокировки до сокращает время удержания блокировки в течение .
Также подумайте, если вы не можете лучше хранить общие данные в базе данных, и пусть она позаботится обо всей блокировке, так как с гораздо меньшей вероятностью вам будет трудно отследить ошибки, если база данных работает быстро. достаточно для вашей заявки.
В в некоторых случаях вы также можете использовать кэш Aps.net для обработки общих данных и просто удалять элемент из кеша при изменении данных. Следующее чтение может поместить новую копию в кеш.
Помните
«Лучший вид блокировки - это блокировка, которая вам не нужна (то есть не делите данные между потоками)».
Я уже дал частичный ответ в https://stackoverflow.com/questions/1549472/what-are-upcoming-trends-in-software-industry-and-its- impact-for-java-developer / 1549740 # 1549740 , но я добавлю несколько ссылок в этот ответ. На самом деле, я не буду освещать и обсуждать технические качества Spring, поскольку они не новы и, на мой взгляд, не объясняют шумиху. Вместо этого рассмотрите следующие события и приобретения:
Как видите, за последний год в сфере SpringSource произошло множество изменений, причем этим летом произошли довольно большие изменения. Разве вы не видите сейчас общую картину? Что ж, посмотрите на получившийся стек: с Java, Groovy, Grails в качестве языков, Spring в качестве контейнера, tc Server в качестве базового сервера приложений, Hyperic для работоспособности и мониторинга, VMware для виртуализации, CloudFoundry в качестве системы управления и обеспечения, VMware / SpringSource имеет полный набор для упругого облака . И под полным я подразумеваю действительно полный, поскольку этот стек охватывает все, кроме JVM, для размещения Java в облаке: программное обеспечение, платформу и инфраструктуру, то есть все различные разновидности облачных вычислений.
Другими словами, пока другие все еще готовятся к этому, VMware и SpringSource уже готовы к волне SaaS 1 / PaaS 2 / IaaS 3 .
Это захватывающе, здесь идут инновации, это создает (или, по крайней мере, подпитывает) тенденцию, это оказывает большое давление на Java, рынок серверов приложений, Java EE, ... и это объясняет, IMO шум вокруг VMware / SpringSource. Больше, чем предстоящее появление Spring 3.0 :).
1 Программное обеспечение как услуга
2 Платформа как услуга
3 Инфраструктура как услуга
1 Программное обеспечение как услуга
2 Платформа как услуга
3 Инфраструктура как услуга
1 Программное обеспечение как услуга
2 Платформа как услуга
3 Инфраструктура как услуга
Я думаю, вы Возможно, вы захотите прочитать о внедрении зависимостей и инверсии управления .
Spring - это (среди прочего) инверсия контейнера управления.
Пружина (помимо прочего) является инверсией контейнера управления.
Пружина (помимо прочего) является инверсией контейнера управления.
Spring существует уже некоторое время, он представил важные новые шаблоны проектирования и косвенно отвечает за реформирование EJB ].
Но я думаю, вы слышите об этом сейчас, потому что в августе VMware купила SpringSource за 420 миллионов долларов. Это довольно много для разработчика и консалтинговой компании с открытым исходным кодом ...
Что ж, он предоставляет отличную дополнительную структуру, которая позволяет вам сосредоточиться на написании меньшего количества кода инфраструктуры и большего количества кода приложения.
Он предоставляет такие вещи, как:
и многое другое.
Многие из этих концепций довольно сложны, и, поскольку они обеспечивают основу, вы можете просто подключить их компоненты и использовать то, что уже было создано для вас.
В начальные дни твердого старого J2EE появился Spring Framework, который позволил внедрить зарегистрированные сервисы JNDI в EJB.вы могли бы начать проектировать EJB, где он мог бы быть модульно протестирован, без необходимости запускать сервер приложений J2EE - просто смоделируйте сервисы JNDI, с которыми он сотрудничал, с помощью внедрения зависимостей Spring.
Что ж, на тот момент это было не такое уж и незначительное чудо.
В наши дни, если вы хотите знать, почему Spring продолжает бурно развиваться, прочтите эту книгу и узнайте об этом стеке разработки и о том, как Spring играет важную роль в качестве основного механизма фабрики компонентов для всего, что его окружает - от служб BlazeDS к iBATIS или от Hibernate к компонентам обмена сообщениями ActiveMQ:
И посмотрите эту статью: