Имеет ли DeferredResult состояние гонки при возврате потенциально уже установленного экземпляра?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Имеет ли DeferredResult состояние гонки при возврате потенциально уже установленного экземпляра?

Сообщение Anonymous »

Я использую DeferredResult в своем приложении Spring MVC для обработки некоторой обработки на стороне сервера потенциально длительного действия. Это может быть очень быстро, а может занять секунду или две.

Но в любом случае входящий HTTP-запрос приводит к тому, что действие помещается в очередь, за выполнение которой отвечает отдельный поток (через ExecutorService). Затем вызывается обратный вызов, уведомляющий толкатель о завершении операции.

Я переработал часть этого поведения в служебный метод:

Код: Выделить всё

    public static DeferredResult toResponse(GameManager gameManager, final Player player, Action action) {
DeferredResult deferredResult = new DeferredResult();
gameManager.execute(action, new Handler() {
@Override
public void handle(Result result) {
JSONObject obj;
try {
obj = gameManager.getGameJSON(player);
obj.put("success", result.getResult());
obj.put("message", result.getMessage());
deferredResult.setResult(obj.toString());  // POINT B
} catch (JSONException e) {
deferredResult.setErrorResult(e);
}
}
});
return deferredResult; // POINT A
}
Но мне интересно, что произойдет, если выполнение действия происходит так быстро, что вызывается метод setResult() () в DeferredResult до того, как он был возвращен () в вызывающий метод.

Увидит ли Spring, что возвращаемый DeferredResult уже имеет значение, и обработает его, или он начнет «наблюдать» за тем, чтобы установщик был вызван после предоставления экземпляра?

Подробнее здесь: https://stackoverflow.com/questions/320 ... -already-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»