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 objetoCallable
termine 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 !!