Хотите создать синхронизированную загрузку данных в действии сервлета - PullRequest
0 голосов
/ 01 декабря 2011

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

DoTheDownloadAction(){

}

Как мне выполнить вышеуказанное требование?

Ответы [ 3 ]

0 голосов
/ 01 декабря 2011

Учитывая, что у вас есть класс DownloadHelper, и в своем сервлете вы создали один экземпляр этого класса, тогда вы можете сделать что-то вроде этого:

DoTheDownloadAction() {
   synchronized(downloadHelper) {
      //Downloading something
   }
}

Давайте представим, что у вас есть кнопка, называемая «скачать»"с id =" download "в вашем jsp, и у вас есть этот код в вашем javascript

var globalDownloadStatus = false;
jQuery(document).ready(function(){
   jQuery('#download'(.click(function(){
       if(globalDownloadStatus == true) {
           alert('download already in progress, please wait');
           return;
       }
       jQuery.get('yourservletpath', function(data){
          alert('Download Complete');
       });
   });
});
0 голосов
/ 01 декабря 2011

Примите во внимание, что обычно веб-серверы могут распределяться для масштабируемости.Обычно подходящим решением является синхронизация через блокировки базы данных.Однако для вас может быть достаточно просто использовать synchronized ключевое слово java для объекта, которого вы хотите подождать.

Кроме того, вы просите пессимистическую блокировку.Обычно это плохой дизайн архитектуры.

0 голосов
/ 01 декабря 2011

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

...