Java: если я создаю новый объект на каждый запрос, мне все еще нужны потоки? - PullRequest
2 голосов
/ 24 мая 2011

общий вопрос, это может быть в c, я думаю, также
если у меня есть (в моем случае класс http requst), который вызывается из функции оболочки
эта функция-обертка является публичным API. затем внутри функции-обертки я инициирую новый объект Request, который предполагает выполнение запроса с параметрами, поступающими из функции-обертки
мне нужно обернуть объект запроса в поток (у меня есть класс пула потоков, которые выполняют рабочие потоки)
будет делать создание объекта в стеке для каждого запроса?
например:

public void Wrapper(String a,String b)
{

// im doing ..
MyRequst req = new MyRequest(a,b); // will do the http requst 

}

or to do :

public void Wrapper(String a,String b)
{

// im doing ..
MyThreadPool.GetInstance().RunTask(new MyRequest(a,b)); // will do the http request 

}

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Вопрос не очень ясен, но из того, что можно сделать вывод, уместен вопрос, является ли создание локальных переменных достаточным для безопасности потока. Ответ - да.

С Java-параллелизм на практике :

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

Следует помнить, что все объекты хранятся в куче. Элементы в стеке - это примитивы и ссылки на объекты в куче, которые называются локальными переменными и всегда имеют ширину в одно слово (за исключением длинных и двойных значений); эти переменные не следует путать с концепцией локальных переменных метода в языке программирования Java (которую люди ошибочно считают хранящейся в стеке).

Используя локальные переменные, можно гарантировать, что объекты в куче доступны только текущему потоку выполнения, если, конечно, не было предпринято никаких попыток поделиться такими объектами с другими потоками (в этом случае соответствующие методы синхронизации должны быть занятым).

0 голосов
/ 24 мая 2011

Это дает альтернативу тому, что вы пытаетесь сделать. Я предполагаю, что вы пытаетесь манипулировать объектом запроса. Рассматривали ли вы использовать "HttpServletRequestWrapper".

http://download.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServletRequestWrapper.html

Проверьте эту ссылку: http://www.oracle.com/technetwork/java/filters-137243.html На приведенной выше веб-странице перейдите в раздел «Программирование пользовательских запросов и ответов».

Другой пример, http://www.coderanch.com/t/172274/java-Web-Component-SCWCD/certification/When-HttpRequestWrapper

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...