Как запустить функцию вне функции, в которой вы работаете - PullRequest
0 голосов
/ 13 мая 2018

Я все еще новичок в Java, и я хотел бы знать, как я могу достичь этого сценария.У меня есть функция, которая выполняет определенные вычисления, и после этого я хотел бы передать результат другой функции, чтобы она могла отправить уведомление.

Моя проблема в том, что вторая функция, кажется, вызывает программудождитесь ответа, хотя его функция void.В результате моей программе требуется время, чтобы вернуть результат, потому что она выполняет другую задачу, которая должна быть независимой.

Вот некоторый код sudo для объяснения того, что я пытаюсь сделать:

public class MyCalculationclass {

     public String PerformCalculations (Object object){
       // perform calculation
       sendNotificationToUser(usernotificationToken, calculationValue)

       return "Success"

        }

     public void sendNotificationToUser(String usernotificationToken,String calculationValue ){

          // send user the notification
       }

}

Я хотел бы уведомить функцию void, чтобы она выполнялась, когда мои вычисления завершены таким образом, что яне нужно ждать, пока запустится функция void, прежде чем я получу сообщение об успехе.Как я могу добиться этого в Java.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Чтобы правильно использовать потоки, вам следует подумать о создании службы исполнителя :

public class MyCalculationclass {
     private final ExecutorService executorService = Executors.newCachedThreadPool();

     public String PerformCalculations (Object object){
       // perform calculation
       executorService.execute(() ->
           sendNotificationToUser(usernotificationToken, calculationValue));

       return "Success"

        }

     public void sendNotificationToUser(String usernotificationToken,String calculationValue ){

          // send user the notification
       }

}

Позже вы можете заменить execute() на submit(), чтобы получить объект Future . Или, что еще лучше, используйте CompletableFuture .

0 голосов
/ 13 мая 2018

Использовать темы:

new Thread(() -> sendNotificationToUser(usernotificationToken, calculationValue)).start();

вместо

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