Maison >Java >javaDidacticiel >Comment implémenter l'interface Callable pour créer une classe de thread en Java

Comment implémenter l'interface Callable pour créer une classe de thread en Java

PHPz
PHPzavant
2023-05-11 11:58:061016parcourir

Implémentez l'interface Callable pour créer une classe de thread

L'interface Callable est fournie depuis Java5. Cette interface est une version améliorée de l'interface Runnable fournit une méthode call() comme corps d'exécution du thread. ) peut avoir une valeur de retour. La méthode call () peut être déclarée pour lever une exception.

  • boolean Cancel(boolean may) Tente d'annuler la tâche appelable associée dans ce futur. boolean cancel(boolean may) 试图取消该 Future 里关联的 Callable 任务。

  • V get() 返回 Call 任务里 call() 方法的返回值。调用该方法会照成线程阻塞,必须等待子线程结束后才会得到返回值。

  • V get(long timeout,TimeUnit unit) 返回 Call 任务里 call() 方法的返回值。该方法让程序最多阻塞 timeout 和 unit 指定的时间,如果经过指定的时间,如果经过指定的时间依然没有返回值,将会抛出 TimeoutException 异常。

  • boolean isCancelled() 如果在 Callable 任务正常完成前被取消,则返回 true。

  • boolean isDone() 

V get() Renvoie la valeur de retour de la méthode call() dans la tâche Call. L’appel de cette méthode entraînera le blocage du thread et vous devrez attendre la fin du thread enfant avant d’obtenir la valeur de retour.


    V get(long timeout,TimeUnit unit) Renvoie la valeur de retour de la méthode call() dans la tâche Call. Cette méthode permet au programme de bloquer jusqu'au temps spécifié par timeout et unit. Si le temps spécifié s'écoule et s'il n'y a toujours pas de valeur de retour après le temps spécifié, une exception TimeoutException sera levée.
  1. boolean isCancelled() Renvoie vrai si la tâche appelable est annulée avant qu'elle ne se termine normalement.
  2. boolean isDone() Renvoie vrai si la tâche Callable est terminée.
  3. Étapes d'implémentation Runnable :
Créez une classe d'implémentation de l'interface Callable et implémentez la méthode call(). La méthode call() sert de corps d'exécution du thread, et la méthode call() a. une valeur de retour. 🎜🎜🎜🎜Utilisez la classe FutureTask pour envelopper l'objet Callable. 🎜🎜🎜🎜Utilisez l'objet FutureTask comme cible de l'objet Thread pour créer et démarrer un nouveau fil de discussion. 🎜🎜🎜🎜Activez la méthode get() de l'objet FutureTask pour obtenir la valeur de retour du thread enfant. 🎜🎜🎜
<code>public class CallableDemo implements Callable<Integer> {<br>    public static void main(String args[]) {<br>        FutureTask<Integer> futureTask = new FutureTask<Integer>(new CallableDemo());<br>        new Thread(futureTask).start();<br>        try {<br>            System.out.println("子线程返回值:" + futureTask.get());<br>        } catch (InterruptedException e) {<br>            e.printStackTrace();<br>        } catch (ExecutionException e) {<br>            e.printStackTrace();<br>        }<br>        if (futureTask.isDone()) {<br>            System.out.println("线程结束");<br>        }<br>    }<br><br>    @Override<br>    public Integer call() throws Exception {<br>        System.out.println("线程开始");<br>        int ss = 0;<br>        for (int i = 0; i < 20; i++) {<br>            ss += i;<br>        }<br>        return ss;<br>    }<br>}</code>

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