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–

  1. 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.
  2. 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 objeto Callable termine a execução do método call() e retorne seu resultado.Se o fio for interrompido enquanto o método get() aguarda o resultado, ele lança uma exceção InterruptedException. Se o método call() lança uma exceção, este método lança uma exceção ExecutionException.

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

este post foi útil?

avise – nos se gostou do post. Só assim podemos melhorar.
Sim
Não