Java Callable Future Example
One of the benefits of the Java executor framework is that we can run concurrent tasks that may return a single result after processing the tasks. A API de concorrência Java consegue isso com as duas seguintes interfaces Callable e Future.
interfaces Java Caláveis e futuras
1.1. A interface Callable
Callable tem o método call(). Neste método, temos de implementar a lógica de uma tarefa. A interface Callable é uma interface parametrizada, o que significa que temos que indicar o tipo de dados que o método call() irá retornar.
2.2. Future
Future interface has methods to obtain the result generated by a Callable object and to manage its state.
Java Callable Future Example
In this example, We are creating a FactorialCalculator which is of type Callable. Significa que vamos anular o método call() e, após o cálculo, vamos devolver o resultado do método call(). This result later can be retrieved from Future reference held by main program.
agora vamos testar a calculadora factorial acima usando duas linhas e 4 números.
saída do programa.Aqui enviamos um objeto Callable para ser executado em um executor usando o método submit(). Este método recebe um Callable objeto como um parâmetro e retorna um Future objeto que podemos usar com dois objectivos principais–
- podemos controlar o status da tarefa – pode cancelar a tarefa e verificar se ele tiver terminado. Para este fim, temos usado o método
isDone()para verificar se as tarefas tinham terminado. - podemos obter o resultado retornado pelo método call (). Para este fim, temos usado o método
get(). Este método espera até que o objetoCallabletermine a execução do métodocall()e retorne seu resultado.Se o fio for interrompido enquanto o métodoget()aguarda o resultado, ele lança uma exceçãoInterruptedException. Se o métodocall()lança uma exceção, este método lança uma exceçãoExecutionException.
a interface Future fornece outra versão do método get(), ou seja, get (longtimeout,TimeUnitunit). Esta versão do método get, se o resultado da tarefa não estiver disponível, espera por ele para o tempo especificado. Se o período de tempo especificado passar e o resultado ainda não estiver disponível, o método retorna um valor null.Feliz Aprendizagem !!