Maison > Java > javaDidacticiel > En Java, comment obtenir le résultat d'un thread ?

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

WBOY
Libérer: 2023-05-10 09:10:07
avant
1401 Les gens l'ont consulté

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();
}
}
}
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal