Maison Java javaDidacticiel Modèle futur en Java

Modèle futur en Java

Jun 26, 2017 am 11:45 AM
future 模式

jdk1.7.0_79

Cet article est en fait une référence à ce qui précède Une continuation ou un supplément de "13.ThreadPoolExecutorThread Pool'ssubmitMéthode". Dans la méthode submit mentionnée ci-dessus, FutureTask est apparue, ce qui m'a obligé à m'arrêter et à changer de direction vers Java Le mode Futur de .

Future est un modèle de conception en programmation simultanée. Pour le multithreading, le thread A doit attendre le thread B, il n'est pas nécessaire d'attendre B Vous pouvez obtenir un avenir Futur<.>, attendez que B ait le résultat et obtenez ensuite le vrai résultat.

1

2

ExecutorService executor = Executors.newSingleThreadExecutor();

Future<String> future = executor.submit(callable);    //主线程需要callable线程的结果,先拿到一个未来的FutureSystem.out.println(future.get());    //有了结果后再根据get方法取真实的结果,当然如果此时callable线程如果没有执行完get方法会阻塞执行完,如果执行完则直接返回结果或抛出异常

Copier après la connexion
Autrement dit,
Future

représente le résultat d'un calcul asynchrone.

Ce qui précède représente le principe d'exécution du mode

Futur

Sur la base d'exemples en ligne, nous pouvons en implémenter un nous-mêmes Futur.

1

1 package com.future;2 3 /**4  * 数据结果5  * Created by yulinfeng on 6/18/17.6  */public interface Data {8     String getResult() throws InterruptedException;9 }

Copier après la connexion

1

 1 package com.future; 2  3 /** 4  * 结果的真实计算过程 5  * Created by yulinfeng on 6/18/17. 6  */ public class RealData implements Data { 8     protected String data; 9 10     public RealData(String data) {11         try {12             System.out.println("正在计算结果");13             Thread.sleep(3000);     //模拟计算14         } catch (InterruptedException e) {15             e.printStackTrace();16         }17         this.data = data + “ world”;18     }19 20     public String getResult() throws InterruptedException {21         return data;22     }23 }

Copier après la connexion

1

 1 package com.future; 2  3 /** 4  * 真实结果RealData的代理 5  * Created by yulinfeng on 6/18/17. 6  */ public class FutureData implements Data { 8     RealData realData = null;   //对RealData的封装,代理了RealData 9     boolean isReady = false;    //真实结果是否已经准备好10 11     public synchronized void setResultData(RealData realData) {12         if (isReady) {13             return;14         }15         this.realData = realData;16         isReady = true;17         notifyAll();    //realData已经被注入到了futureData中,通知getResult方法18     }19 20     public synchronized String getResult() throws InterruptedException {21         if (!isReady) {22             wait();     //数据还未计算好,阻塞等待23         }24         return realData.getResult();25     }26 }

Copier après la connexion

1

 1 package com.future; 2  3 /** 4  * Client主要完成的功能包括:1. 返回一个FutureData;2.开启一个线程用于构造RealData 5  * Created by yulinfeng on 6/18/17. 6  */ public class Client { 8  9     public Data request(final String string) {10         final FutureData futureData = new FutureData();11 12         /*计算过程比较慢,单独放到一个线程中去*/13         new Thread(new Runnable() {14 15             public void run() {16                 RealData realData = new RealData(string);17                 futureData.setResultData(realData);18             }19         }).start();20 21         return futureData;  //先返回一个“假”的futureData22     }23 }

Copier après la connexion
Lisez attentivement la mise en œuvre du mode

1

 /** 2  * 负责调用Client发起请求,并使用返回的数据。 3  * Created by yulinfeng on 6/18/17. 4  */ public class Main { 6     public static void main(String[] args) throws InterruptedException { 7         Client client = new Client(); 8         System.out.println("准备计算结果"); 9         Data data = client.request("hello");    //立即返回一个“假”的futureData,可以不用阻塞的等待数据返回,转而执行其它任务10         System.out.println("执行其它任务");11         Thread.sleep(3000);     //模拟执行其它任务12         System.out.println("数据的计算结果为:" + data.getResult());13     }14 }

Copier après la connexion
Future

par le programme ci-dessus. Il n'est pas difficile de constater que le mode Future est le meilleur. requête asynchrone et une combinaison de modèles de proxy . Bien entendu, le mode Future a été implémenté pour nous dans JDK. Modifier RealData

classe :

Modifier

1

 1 package com.future; 2  3 import java.util.concurrent.Callable; 4  5 /** 6  * 结果的真实计算过程 7  * Created by yulinfeng on 6/18/17. 8  */ public class RealData2 implements Callable<String> {10     protected String data;11 12     public RealData2(String data) {13         this.data = data;14     }15     public String call() throws Exception {16         try {17             System.out.println("正在计算结果");18             Thread.sleep(2000);     //模拟计算结果19         } catch (InterruptedException e) {20             e.printStackTrace();21         }22         this.data = data + " world";23         return data;24     }25 }

Copier après la connexion
Main

Catégorie Test :

  现在回到上文还未解决完的AbstractExecutorService#submit方法。

  类比上面的Client#request方法,在Client#request中先创建一个FutureData实例,而在AbstractExecutorService#submit中则是创建一个FutureTask实例,接着Client#request新创建一个线程用于异步执行任务,并直接返回FutureData,而在AbstractExecutorService#submit中同样也将任务交给了execute方法,并直接返回FutureTask。当然JDKFuture模式的实现更为复杂。

  在《12.ThreadPoolExecutor线程池原理及其execute方法》中我们讲解了execute方法,在ThreadPoolExecutor$Worker#runWorker方法第1145行中是对task任务的调用:

1

//ThreadPoolExecutor$Worker#runWorkertask.run();

Copier après la connexion

   submit调用execute以执行run方法,实际执行的是FutureTask中的run方法。在FutureTask#run中,可以看到对任务Callable类型的task异步的执行,以及结果的保存。

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

À quoi sert le mode Ne pas déranger de WeChat ? À quoi sert le mode Ne pas déranger de WeChat ? Feb 23, 2024 pm 10:48 PM

Que signifie le mode Ne pas déranger de WeChat ? De nos jours, avec la popularité des smartphones et le développement rapide de l'Internet mobile, les plateformes de médias sociaux sont devenues un élément indispensable de la vie quotidienne des gens. WeChat est l’une des plateformes de médias sociaux les plus populaires en Chine, et presque tout le monde possède un compte WeChat. Nous pouvons communiquer avec nos amis, notre famille et nos collègues en temps réel via WeChat, partager des moments de notre vie et comprendre la situation actuelle de chacun. Cependant, à notre époque, nous sommes également inévitablement confrontés aux problèmes de surcharge d'informations et de fuite de la vie privée, en particulier pour ceux qui ont besoin de se concentrer ou de se concentrer.

A quoi sert le mode veille sur iPhone ? A quoi sert le mode veille sur iPhone ? Nov 04, 2023 am 11:13 AM

Les appareils iOS sont depuis longtemps capables de suivre vos habitudes de sommeil et bien plus encore grâce à l'application Santé. Mais n’est-ce pas ennuyeux d’être dérangé par des notifications pendant que vous dormez ? Ces notifications peuvent ne pas être pertinentes et donc perturber vos habitudes de sommeil. Bien que le mode Ne pas déranger soit un excellent moyen d'éviter les distractions pendant votre sommeil, il peut vous faire manquer des appels et des messages importants que vous recevez pendant la nuit. Heureusement, c'est là qu'intervient le mode veille. Apprenons-en plus à ce sujet et comment l'utiliser sur iPhone. Quel rôle joue le mode veille sur l'iPhone ? Le mode veille est un mode de concentration dédié dans iOS qui est automatiquement activé en fonction de votre horaire de sommeil dans l'application « Santé ». Cela vous aide à définir une alarme, puis

Le mode Ne pas déranger ne fonctionne pas sur iPhone : correctif Le mode Ne pas déranger ne fonctionne pas sur iPhone : correctif Apr 24, 2024 pm 04:50 PM

Même répondre à des appels en mode Ne pas déranger peut être une expérience très ennuyeuse. Comme son nom l'indique, le mode Ne pas déranger désactive toutes les notifications d'appels entrants et les alertes provenant d'e-mails, de messages, etc. Vous pouvez suivre ces ensembles de solutions pour résoudre ce problème. Correctif 1 – Activer le mode de mise au point Activez le mode de mise au point sur votre téléphone. Étape 1 – Faites glisser votre doigt depuis le haut pour accéder au Centre de contrôle. Étape 2 – Ensuite, activez le « Mode Focus » sur votre téléphone. Le mode Focus active le mode Ne pas déranger sur votre téléphone. Aucune alerte d’appel entrant n’apparaîtra sur votre téléphone. Correctif 2 – Modifier les paramètres du mode de mise au point S'il y a des problèmes dans les paramètres du mode de mise au point, vous devez les résoudre. Étape 1 – Ouvrez la fenêtre des paramètres de votre iPhone. Étape 2 – Ensuite, activez les paramètres du mode Focus

Que signifie le mode epc+o ? Que signifie le mode epc+o ? Nov 09, 2022 am 10:54 AM

Le modèle epc+o fait référence au cadre contractuel général qui intègre la conception, l'approvisionnement, etc. Il s'agit de certains liens opérationnels dérivés de l'epc ; c'est-à-dire que pendant la période de construction, l'entrepreneur général ne doit pas seulement entreprendre des tâches de conception au sens traditionnel du terme. De plus, il doit également entreprendre toutes les tâches de maintenance pendant la période d'exploitation. Ce modèle peut grandement améliorer l'efficacité opérationnelle de nombreux projets et réduire rapidement les coûts d'exploitation.

iPhone 15 Pro : Comment se débarrasser du symbole du mode silencieux dans la barre d'état iPhone 15 Pro : Comment se débarrasser du symbole du mode silencieux dans la barre d'état Sep 24, 2023 pm 10:01 PM

Sur les modèles iPhone 15 Pro et iPhone 15 Pro Max, Apple a introduit un bouton d'action physiquement programmable qui remplace le traditionnel interrupteur sonnerie/silencieux au-dessus des boutons de volume. Le bouton d'action peut être programmé pour exécuter plusieurs fonctions différentes, mais la possibilité de basculer entre les modes silencieux et sonnerie n'a pas disparu. Par défaut, un appui long sur le bouton d'action mettra l'appareil sous silence et le retour tactile du bouton clignotera trois fois. Les deux modèles d'iPhone 15 Pro afficheront un symbole de cloche barrée à côté de l'heure dans la barre d'état pour indiquer que le mode silencieux/silencieux est activé, et il le restera jusqu'à ce que vous appuyiez à nouveau longuement sur le bouton Action pour réactiver l'appareil. Si vous préférez mettre votre iPhone en mode silencieux

Comment activer le « Mode sombre Notepad++ » et le « Thème sombre Notepad++ » ? Comment activer le « Mode sombre Notepad++ » et le « Thème sombre Notepad++ » ? Oct 27, 2023 pm 11:17 PM

Le mode sombre de Notepad++ v8.0 n'a pas de paramètres, Notepad++ est l'éditeur de texte le plus utile. Chaque application exécutée sur Windows 10 prend en charge le mode sombre. Vous pouvez nommer des navigateurs Web tels que Chrome, Firefox et Microsoft Edge. Si vous travaillez sur Notepad++, le fond blanc par défaut peut vous faire mal aux yeux. Les développeurs ont ajouté le mode sombre à la version 8 de Notepad++, voici comment l'activer. Activer le Bloc-notes pour Windows 11/10 ++ Mode sombre Lancez le Bloc-notes ++ Cliquez sur "Paramètres" > "Préférences" > "Mode sombre" Sélectionnez "Activer le mode sombre" pour redémarrer le Bloc-notes

Guide d'utilisation du mode veille dans iOS 17 Guide d'utilisation du mode veille dans iOS 17 Aug 22, 2023 pm 04:01 PM

Le mode veille arrive sur iPhone avec iOS17, et ce guide vise à vous montrer comment utiliser cette fonctionnalité sur votre iPhone. Le mode veille est une fonctionnalité révolutionnaire qui transforme l’iPhone en un écran intelligent dynamique et toujours actif. Lorsque votre iPhone est posé horizontalement sur le côté pendant le chargement, il active le mode veille. Ce mode présente magnifiquement une multitude de widgets utiles, notamment l'heure actuelle, les mises à jour de la météo locale, un diaporama de vos photos préférées et même des commandes de lecture de musique. Un avantage significatif de ce mode est sa capacité à afficher des notifications, permettant aux utilisateurs de les visualiser et d'interagir avec elles sans avoir à réveiller complètement leur iPhone. Comment utiliser le mode veille Pour que le mode veille fonctionne correctement, votre iPhone doit être en cours d'exécution.

Comment quitter le mode S sous Windows 10/11 Comment quitter le mode S sous Windows 10/11 Aug 03, 2023 pm 08:17 PM

Windows en mode S est conçu pour offrir une sécurité et des performances améliorées en autorisant uniquement l'installation d'applications à partir du Microsoft Store. Bien que cette fonctionnalité aide à prévenir les logiciels malveillants et à garantir un environnement informatique sécurisé, elle peut limiter les utilisateurs souhaitant installer des applications à partir de sources autres que le Microsoft Store. Si vous vous trouvez dans cette situation et que vous vous demandez sans cesse comment quitter le mode S sous Windows 10/11, alors vous êtes au bon endroit car nous vous expliquerons comment quitter le mode S sous Windows 10/11. en utilisant deux méthodes différentes, les étapes vers le mode S vous permettent de profiter de la liberté d'installer des applications où que vous soyez. Découvrez comment quitter le mode S sous Windows

See all articles