JDK8 CompletableFuture.supplyAsync la façon de traiter avec interruptedException

CompletableFuture.supplyAsync(
() -> {
    transporter.write(req);
    //here take the value from a blocking queue,will throw a interruptedException
    return responseQueue.take();
},  executorService);

La méthode commune pour traiter interruptedException est soit d'interrompre de nouveau ou directement jeter interruptedException, mais les deux ne peuvent pas travailler. Quelqu'un a l'idée?

"mais les deux ne peuvent pas travailler." => pourquoi?
les deux ont d'erreur du compilateur. si directe jeter l'exception, le compilateur va montrer exception non gérée, si l'attraper et de les appeler Thead.actuel.d'interruption, le compilateur va montrer doit retourner un T type.
Oui, vous avez besoin de retourner ou de le jeter. Si vous décidez de retourner la valeur null, par exemple: try { return queue.take(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return null; }
supposons que l'avenir représentent un calcul résultat qui est une valeur normale ou une exception, je pense qu'il devrait être un moyen de définir l'exception de l'avenir, il est mieux que le set null.
Je pense que les lambda fonctions ne prennent pas en charge de lever des exceptions afin de lancer une exception est hors de question. La seule chose que vous pouvez faire ici est de rendre quelque chose.

OriginalL'auteur GrapeBaBa | 2014-04-20