Переменные в коде сервера GWT - PullRequest
2 голосов
/ 15 марта 2012

Я довольно новичок в GWT и никогда раньше не работал с сервлетами Java. Я знаю, как создавать RPC, но мне было интересно, есть ли какие-либо проблемы параллелизма с объявлением переменных-членов в моем классе RPC ServiceImpl / RemoteServiceServlet. То есть Из нескольких «одновременных» RPC, перезаписывающих одну и ту же переменную, аналогично тому, что происходит с потоками, когда переменная не объявлена ​​как volatile.

Мне также нужно использовать дополнительный поток в моем коде на стороне сервера, поэтому мне было интересно, есть ли какие-либо проблемы (помимо обычных проблем безопасности потоков) с объявлением некоторых членов сервлета статическими, чтобы другой поток мог получить доступ к переменные без ссылки на экземпляр сервлета. Возможно ли одновременное выполнение нескольких экземпляров одного и того же класса RemoteServiceServlet?

* 1005 Е.Г. *

public class MyServiceImpl extends RemoteServiceServlet implements MyService {

    // Which of these variable declarations are a bad idea in a servlet?
    private String someVariable;
    private static String anotherVariable;
    volatile private static String multiThreadedVariable;

    public void init() { ... }
    ...
}

Спасибо.

1 Ответ

3 голосов
/ 15 марта 2012

Сервлет является одиночным, поэтому существует только один экземпляр класса MyServiceImpl.Вводя эти переменные состояния, вы столкнетесь с проблемами безопасности потоков не потому, что может быть более одного экземпляра MyServiceImpl, а потому, что существует только один экземпляр, который будет обслуживать ВСЕ ваши запросы.Если вы не синхронизируете доступ к этим переменным, у вас будут проблемы с безопасностью потоков, поэтому я рекомендую полностью их удалить (скорее всего, они вам даже не нужны).

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