Maison  >  Article  >  Java  >  En Java, comment obtenir le résultat d’un thread ?

En Java, comment obtenir le résultat d’un thread ?

WBOY
WBOYavant
2023-05-10 09:10:071358parcourir

1. Concept

Future représente le résultat d'une tâche asynchrone qui n'a peut-être pas été terminée. Pour ce résultat, un rappel peut être ajouté pour effectuer les opérations correspondantes après la réussite ou l'échec de l'exécution de la tâche.

2. Interface Future

L'interface Future définit cinq méthodes d'interface principales RunnableFuture et ScheduleFuture héritent de cette interface, et CompleteFuture et ForkJoinTask héritent de cette interface.

3. Exemple

package test;
 
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
 
public class CallableFutureTest {
 
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
Callable<Integer> calculateCallable = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
Thread.sleep(2000);//模拟耗时时间
int result = 1+2;
return result;
}
};
FutureTask<Integer> calculateFutureTask = new FutureTask<>(calculateCallable);
Thread t1 = new Thread(calculateFutureTask);
t1.start();
//现在加入Thread运行的是一个模拟远程调用耗时的服务,并且依赖他的计算结果(比如网络计算器)
try {
//模拟耗时任务,主线程做自己的事情,体现多线程的优势
Thread.sleep(3000);
int a = 3+5;
Integer result = calculateFutureTask.get();
System.out.println("result = "+(a+result));//模拟主线程依赖子线程的运行结果
long endTime = System.currentTimeMillis();
System.out.println("time = "+(endTime-startTime)+"ms");
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Comme vous pouvez le voir ci-dessus, le temps pris ci-dessus est d'environ 3 s. En fait, il s'agit principalement du temps passé par le thread principal à dormir (3000). Cela dépend du résultat du fil, nous pouvons en avoir besoin. Le temps peut prendre 5 s (sous-thread 2 s + fil principal 3 s).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer