2015-01-23 1 views
0

У меня есть два вопроса:Количество объектов класса контроллера весной Веб-приложение MVC

Q1. Что касается жизненного цикла «объекта сервлета»? Поскольку мы знаем, что Объекты запроса и ответа создаются для каждого доступа, но объект Servlet не создается для каждого доступа. В разных запросах есть разные потоки, а не экземпляры, так что он может потреблять меньше ресурсов. Так как серверное повторение одновременно подано? не будет проблемой, когда вы читаете из БД, но когда дело доходит до написания, это создаст проблему? Как это делают крупные компании, такие как amazon или какие-либо услуги онлайн-бронирования [со стороны сервлетов]?

Q2. Сколько объектов класса контроллера создается, когда мы создаем веб-приложение Spring mvc [используя конфигурации по умолчанию]; Я считаю, что ans равен 1, поскольку проверка компонента происходит только один раз !! ... но снова это возвращает меня к предыдущему вопросу, как многократный запрос может работать с использованием одного объекта без вмешательства? ...

Простой пример может сделать мой Ques ясно: Предположим, если у меня есть этот класс контроллера, как:

class controller{ 
void add(a,b){ blah blah...} 
void sub(a,b){ blah blah...} 
void multiply(a,b){blah blah...} 
}; 

Теперь, если есть 3 темы, t1, t2 и t3, которые хотят получить доступ добавить, к югу и умножать одновременно с использованием одного объекта контроллера !! .. как они это сделают одновременно?

Не синхронизация подразумевает, что потоки должны ждать своей очереди. Я хочу сказать, до тех пор, пока нить, с которой объект не будет сделан, будет ждать другой поток. Поэтому они не будут работать одновременно, а ждать. Как крупные компании управляют этими одновременными действиями

+0

Взгляните на [Синхронизация] (http://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html) и [Time Slice] (http://en.wikipedia.org/wiki/Preemption_ (вычисления) #Time_slice) – Sas

ответ

0

Сервлет, как и контроллер Spring MVC, является одноточечным. Таким образом, уникальный экземпляр используется для одновременного обслуживания нескольких запросов.

Это не должно быть проблемой, потому что сервлет или контроллер Spring MVC являются объектами без гражданства: они берут ввод и выводят вывод, не изменяя никакого состояния в памяти. Если это так, то доступ к этому состоянию в памяти должен быть правильно синхронизирован.

Что касается доступа к базе данных, это обычно обрабатывается самой базой данных. Реляционные базы данных предоставляют гарантии ACID, которые позволяют одновременно обращаться к базе данных, используя транзакции. Например, вы можете иметь взаимоблокировки, если вы пишете две строки в обратном порядке, но этот тупик будет обнаружен в базе данных, и один из потоков получит исключение, и его транзакция будет отклонена, оставив базу данных в согласованном состоянии.

Другие базы данных используют более пессимистические блокировки, позволяя доступ к только одному потоку за раз в свои коллекции.

+0

Итак, вы говорите, что один объект может использоваться несколькими потоками для одновременного вызова различных функций. в примере, упомянутом в вопросе, возможно ли, что поток t1, t2, t3 может выполнять добавление, подпрограмму и умножать «одновременно» с использованием одного объекта контроллера !! .. –

+0

Да, это весь принцип потоков: они выполняют код (что угодно это), одновременно. Три потока могут также выполнять один и тот же метод одного и того же объекта одновременно. –

+0

Получил это !! .. спасибо !! .. –