понимание сервиса и состояния гонки - PullRequest
1 голос
/ 08 марта 2011

Я комментирую класс с помощью @service.мой класс @controller будет вызывать @service через @autowired.любое состояние гонки, которое любой может предвидеть в классе @service, метод?

, если у меня есть метод внутри @service

public boolean dosomethinglongtime(){
boolean passed=false;
//write to database...
//do very long task;
//if all task success, passed=true;

return passsed
} 

любая возможность для 2 разных пользователей, которые вызывают контроллер и вызывают этот метод, причина состояния гонки для логического значения, переданного в dosomethinglongtime ()?

ну, это всего лишь сомнение, условия гонки пока не встречаются, я просто хочу снять сомнение.спасибо

1 Ответ

1 голос
/ 08 марта 2011

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

чтобы два пользователя не могли писать / обновлять одни и те же записи в БД, вам необходимо использовать механизм блокировки, такой как оптимистическая блокировка или пессимистическая блокировка .Ссылки ведут на документацию по спящему режиму, но большинство ORM поддерживают оба механизма блокировки.

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