Потоки в Spring

Я не совсем уверен, что вы делаете. Но несколько баллов. R имеет встроенную функцию replicate, которая специально разработана для такого рода вещей. Один из вариантов, который вы можете использовать:

my_vector <- replicate(niter, 
                   expr = (R1_H <= sample(R1_H, replace = T)))

, который будет повторять expr в течение niter раз. В этом случае он выполнит выборку с заменой и вернет матрицу с количеством точек данных в столбцах R1_H и 10k. Тогда вы можете сделать что-то вроде:

mean(colMeans(my_vector))

Чтобы получить «pvalue», о котором вы пытаетесь сообщить.

6
задан RN. 23 April 2009 в 16:42
поделиться

4 ответа

Spring не порождает нити. Tomcat делает. Spring просто создает и подключает объекты для вас.

Каждый запрос из браузера обрабатывается в одном запросе. Это Tomcat, который обрабатывает запрос. Именно Tomcat создает поток для обработки запроса.

Предполагая, что вы только что создали одноэлементный бин в Spring с именем «X». Затем один и тот же экземпляр X используется всеми запросами.

Бины Spring не живут в потоке. Они просто распределяются по куче.

15
ответ дан 8 December 2019 в 14:47
поделиться

Будут ли работать все мои весенние бобы в той же теме? Могу ли я хранить что-то в ThreadLocal и получить это в другой боб? AFAIK для компонентов, которые вы упомянули (служебный бин, DAO-бин - я думаю, это простые бобы Spring), Spring не создает новый поток. Я не понимаю ваш вариант использования (т. Е. Для обмена данными между двумя потоками).

Для большинства веб-приложений новый поток создается для каждого нового запроса, и если вы хотите обмениваться данными между двумя запросами, вы обычно: - используйте параметры get / post для передачи данных - используйте сеанс для обмена данными

. Чтобы ответить на ваш вопрос, я почти уверен, что подпружиненный контейнер не порождает потоки для большинства компонентов.

1
ответ дан 8 December 2019 в 14:47
поделиться

В дополнение ко всем остальным ответам я просто добавлю следующее:

Обычно единственной причиной для переключения потоков является некое требование параллельности. Поскольку это обычно не бывает бесплатным с точки зрения сложности, вы, как правило, будете четко проинформированы, когда это произойдет.

Переключение потоков в рамках однопоточной обработки запроса на самом деле чрезвычайно сложно. Обычно это происходит только в одном месте в контейнере, и это обычно обрабатывается считывателями сокетов tcp / ip, которые получают запрос от внешних клиентов. Эти потоки чтения обычно определяют, какой поток (пул) должен обработать запрос и направить запрос этому потоку. После этого запрос остается в этой теме.

0
ответ дан 8 December 2019 в 14:47
поделиться

Да, вы можете сделать это. Тот же поток будет использоваться для выполнения вашего действия, так что ThreadLocal будет работать. Как правило, один и тот же поток используется и для сессионного компонента без сохранения состояния, если он выполняется в том же экземпляре сервера приложений. Хотя я бы не зависел от этого, поскольку он, вероятно, зависит от поставщика.

Мы используем эту технику для доступа к идентификатору вызывающего абонента в любом месте кода. Мы также используем сессионные компоненты и jms, но явно передаем информацию между контейнерами и устанавливаем ThreadLocal в каждой точке входа. Таким образом, не имеет значения, является ли bean-компонент (session или mdb) локальным или нет.

0
ответ дан 8 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: