Не удалось обработать запрос после создания нескольких потоков - PullRequest
0 голосов
/ 07 февраля 2019

Создал статический объект ExecutorService и использовал его для выполнения асинхронной задачи с вводом в контроллер начальной загрузки пружины.не удалось обработать любой запрос после вызова асинхронной задачи 3 раза.

TaskManager.java

public class TaskManager {
    static ExecutorService e = Executors.newFixedThreadPool(4);
    private TaskManager(){

    }
    public static void addAsyncTask(AsyncTaskWrapper task){
        e.submit(task);
    }
}
 public class AsyncTaskWrapper implements Callable {
    Object input,output;
    Callable callback;
    AsyncTask task;
    public Object getInput() {
        return input;
    }

    public void setInput(Object input) {
        this.input = input;
    }

    public Object getOutput() {
        return output;
    }

    public AsyncTask getTask() {
        return task;
    }

    public void setTask(AsyncTask task) {
        this.task = task;
    }

    public Callable getCallback() {
        return callback;
    }

    public void setCallback(Callable callback) {
        this.callback = callback;
    }

    public AsyncTaskWrapper(AsyncTask task, Callable callback){
        this.callback = callback;
        this.task = task;
    }

    @Override
    public Object call() throws Exception {
        System.out.println("Started");
        output = task.execute(input);
        callback.call();
        System.out.println("call completed");
        return output;
    }
}

RESTControllers.java - необходимо выполнить задачу в асинхронном режиме с вводом для RESTEndpoint.

AsyncTaskWrapper task = new AsyncTaskWrapper(
    (list) -> {
        List l = (List) list;
        try {
                MailingUtils.sendRegistrationMail((String) l.get(0), (String) l.get(1));
        } catch (MessagingException e) {
                e.printStackTrace();
        }
        return null;
    },
    () -> {
        System.out.println("Done");
        return null;
    });

task.setInput(objects);
TaskManager.addAsyncTask(task);

Заранее спасибо

...