#java #multithreading #rest
#java #многопоточность #отдых
Вопрос:
Я разрабатываю веб-приложение с многопоточностью. Концепция заключается в том, что клиенты отправляют запросы на сервер. Сервер создает новый поток для выполнения процедуры (удаление пользователя по названию города). Для запроса клиента и ответа сервера я использую веб-службы RESTful.
Вот код для сервера:
@GET
@Path("/Data_Availability/{Town}
public Response Data_availability(
@PathParam("Town") String Town) throws Exception{
Delete_Dir Procedure = new Delete_Dir();
Thread thread = new Thread(Procedure);
thread.Start();
return Response.ok("Done").build(); // Normally here is the response. But since I create
// a new thread this will be always "Done"
}
И вот код для процедуры:
public class Delete_Dir implements Runnable{
String Town;
public void run() {
try {
execute();
} catch (Exception e) {
e.printStackTrace();
}
}
public Delete_Dir( String Town_ ){
Town = Town_;
}
public void execute(){
try{
File file = new File("c://" Town);
FileUtils.deleteDirectory(file);
}catch (Exception e){
e.printStackTrace(System.out);
}
}
}
Как я могу ответить клиенту через класс Delete_Dir ?? Поскольку я создаю новый поток, если я помещаю ответ туда, где я разместил его выше, он всегда будет «Выполнен».
Комментарии:
1. Почему бы не дождаться завершения метода execute? Сервер самостоятельно обработает все входящие запросы, и вы сможете ответить фактическим результатом.
2. Как я могу проверить, когда поток завершен?? Например, я попробовал Thread.sleep(500); а затем измените переменную result = «done»; Это сработало, но я не хочу использовать 500 мс. Было бы лучше, если бы я создал новый, когда поток будет завершен. Что это за команда?
3. Не используйте поток; просто выполните Procedure.execute() вместо использования потока.
4. Если я это сделаю, это не будет выполняться как многопоточность. Запросы будут в строке только для одного потока. Я хочу выполнять запросы одновременно.
5. Сам сервер приложений является многопоточным, и метод Data_availability() будет вызываться из нескольких потоков одновременно; если у вас есть другие требования (например, если удаление займет достаточно много времени, чтобы исчерпать пул потоков сервера приложений, или если сервер приложений имеет ограничение на затраченное времяв каждом потоке) тогда это другое дело.