Heim Java javaLernprogramm Zukünftiges Muster in Java

Zukünftiges Muster in Java

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

jdk1.7.0_79

Dieser Artikel ist eigentlich eine Referenz auf das Obige Eine Fortsetzung oder Ergänzung von „13.ThreadPoolExecutorThread Pool'ssubmitMethod“. In der oben erwähnten submit-Methode erschien FutureTask, was mich zwang, anzuhalten und die Richtung zu Java zu ändern s Zukunftsmodus.

Zukunft ist ein Entwurfsmuster in der gleichzeitigen Programmierung, Thread A muss auf Thread B, es besteht keine Notwendigkeit, auf B zu warten. Sie können zuerst eine Zukunft Zukunft erhalten , warten Sie, bis B das Ergebnis hat, und erhalten Sie dann das tatsächliche Ergebnis.

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

Future stellt das Ergebnis einer asynchronen Berechnung dar.

Das Obige stellt das Ausführungsprinzip des

Zukunftsmusters dar. Basierend auf Online-Beispielen können wir eines selbst implementieren ZukunftModus.

1 package com.future;2 3 /**4  * 数据结果5  * Created by yulinfeng on 6/18/17.6  */7 public interface Data {8     String getResult() throws InterruptedException;9 }
Nach dem Login kopieren
 1 package com.future; 2  3 /** 4  * 结果的真实计算过程 5  * Created by yulinfeng on 6/18/17. 6  */ 7 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 }
Nach dem Login kopieren
 1 package com.future; 2  3 /** 4  * 真实结果RealData的代理 5  * Created by yulinfeng on 6/18/17. 6  */ 7 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 }
Nach dem Login kopieren
 1 package com.future; 2  3 /** 4  * Client主要完成的功能包括:1. 返回一个FutureData;2.开启一个线程用于构造RealData 5  * Created by yulinfeng on 6/18/17. 6  */ 7 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 }
Nach dem Login kopieren
 1 /** 2  * 负责调用Client发起请求,并使用返回的数据。 3  * Created by yulinfeng on 6/18/17. 4  */ 5 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 }
Nach dem Login kopieren
Lesen Sie sorgfältig die Implementierung des

Future-Musters im obigen Programm. Es ist nicht schwer herauszufinden, dass das Future-Muster das ist asynchrone Anfrage und eine Kombination von Proxy-Mustern . Natürlich wurde der Future-Modus für uns im JDK implementiert.

Ändern

RealData Klasse:

 1 package com.future; 2  3 import java.util.concurrent.Callable; 4  5 /** 6  * 结果的真实计算过程 7  * Created by yulinfeng on 6/18/17. 8  */ 9 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 }
Nach dem Login kopieren
Ändern

MainTestkategorie:

 1 package com.future; 2  3 import java.util.concurrent.ExecutionException; 4 import java.util.concurrent.ExecutorService; 5 import java.util.concurrent.Executors; 6 import java.util.concurrent.Future; 7  8 /** 9  * 负责调用Executor的submit,并使用返回的数据。10  * Created by yulinfeng on 6/18/17.11  */12 public class Main2 {13 14     public static void main(String[] args) throws InterruptedException, ExecutionException {15         ExecutorService client = Executors.newSingleThreadExecutor();   //类似Client16         System.out.println("准备计算结果");17         Future<String> data = client.submit(new RealData2("hello"));    //类似Client.request18         System.out.println("执行其它任务");19         Thread.sleep(3000);20         System.out.println("数据的计算结果为:" + data.get());21     }22 }
Nach dem Login kopieren

  现在回到上文还未解决完的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任务的调用:

//ThreadPoolExecutor$Worker#runWorkertask.run();
Nach dem Login kopieren

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

Das obige ist der detaillierte Inhalt vonZukünftiges Muster in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was bewirkt der „Bitte nicht stören'-Modus von WeChat? Was bewirkt der „Bitte nicht stören'-Modus von WeChat? Feb 23, 2024 pm 10:48 PM

Was bedeutet der „Bitte nicht stören“-Modus von WeChat? Mit der Popularität von Smartphones und der rasanten Entwicklung des mobilen Internets sind Social-Media-Plattformen zu einem unverzichtbaren Bestandteil des täglichen Lebens der Menschen geworden. WeChat ist eine der beliebtesten Social-Media-Plattformen in China und fast jeder hat ein WeChat-Konto. Über WeChat können wir in Echtzeit mit Freunden, Familie und Kollegen kommunizieren, Momente in unserem Leben teilen und die aktuelle Situation des anderen verstehen. Allerdings sind wir in dieser Zeit zwangsläufig auch mit den Problemen der Informationsüberflutung und des Verlusts der Privatsphäre konfrontiert, insbesondere für diejenigen, die sich konzentrieren müssen oder

Wofür wird der Schlafmodus auf dem iPhone verwendet? Wofür wird der Schlafmodus auf dem iPhone verwendet? Nov 04, 2023 am 11:13 AM

iOS-Geräte können mit der Health-App seit langem Ihre Schlafmuster und mehr verfolgen. Aber ist es nicht ärgerlich, wenn Sie im Schlaf durch Benachrichtigungen gestört werden? Diese Benachrichtigungen sind möglicherweise irrelevant und stören daher Ihren Schlafrhythmus. Der „Bitte nicht stören“-Modus ist zwar eine gute Möglichkeit, Ablenkungen beim Schlafen zu vermeiden, kann jedoch dazu führen, dass Sie wichtige Anrufe und Nachrichten verpassen, die Sie nachts erhalten. Zum Glück kommt hier der Schlafmodus ins Spiel. Erfahren Sie mehr darüber und wie Sie es auf dem iPhone verwenden. Welche Rolle spielt der Schlafmodus auf dem iPhone? Der Schlafmodus ist ein dedizierter Fokusmodus in iOS, der automatisch basierend auf Ihrem Schlafplan in der „Health“-App aktiviert wird. Es hilft Ihnen, einen Alarm einzustellen und dann

„Bitte nicht stören'-Modus funktioniert auf dem iPhone nicht: Behebung „Bitte nicht stören'-Modus funktioniert auf dem iPhone nicht: Behebung Apr 24, 2024 pm 04:50 PM

Selbst das Beantworten von Anrufen im Modus „Bitte nicht stören“ kann ein sehr lästiges Erlebnis sein. Wie der Name schon sagt, deaktiviert der Modus „Bitte nicht stören“ alle Benachrichtigungen über eingehende Anrufe und Warnungen von E-Mails, Nachrichten usw. Sie können diesen Lösungssätzen folgen, um das Problem zu beheben. Fix 1 – Fokusmodus aktivieren Aktivieren Sie den Fokusmodus auf Ihrem Telefon. Schritt 1 – Wischen Sie von oben nach unten, um auf das Kontrollzentrum zuzugreifen. Schritt 2 – Aktivieren Sie als Nächstes den „Fokusmodus“ auf Ihrem Telefon. Der Fokusmodus aktiviert den „Bitte nicht stören“-Modus auf Ihrem Telefon. Es werden keine Benachrichtigungen über eingehende Anrufe auf Ihrem Telefon angezeigt. Fix 2 – Fokusmodus-Einstellungen ändern Wenn es Probleme mit den Fokusmoduseinstellungen gibt, sollten Sie diese beheben. Schritt 1 – Öffnen Sie Ihr iPhone-Einstellungsfenster. Schritt 2 – Als nächstes schalten Sie die Fokusmodus-Einstellungen ein

Was bedeutet EPC+O-Modus? Was bedeutet EPC+O-Modus? Nov 09, 2022 am 10:54 AM

Das epc+o-Modell bezieht sich auf den allgemeinen Vertragsrahmen, der Design, Beschaffung usw. integriert. Es handelt sich um einige betriebliche Verknüpfungen, die von epc abgeleitet sind, d. h., während der Bauzeit muss der Generalunternehmer nicht nur Designaufgaben im herkömmlichen Sinne übernehmen Darüber hinaus muss es auch alle Wartungsarbeiten während der Betriebszeit übernehmen. Dieses Modell kann die betriebliche Effizienz vieler Projekte erheblich verbessern und die Betriebskosten schnell senken.

iPhone 15 Pro: So entfernen Sie das Silent-Mode-Symbol in der Statusleiste iPhone 15 Pro: So entfernen Sie das Silent-Mode-Symbol in der Statusleiste Sep 24, 2023 pm 10:01 PM

Bei den Modellen iPhone 15 Pro und iPhone 15 Pro Max hat Apple eine physisch programmierbare Aktionstaste eingeführt, die den herkömmlichen Klingel-/Stummschalter über den Lautstärketasten ersetzt. Die Aktionstaste kann so programmiert werden, dass sie mehrere verschiedene Funktionen ausführt, aber die Möglichkeit, zwischen Stumm- und Klingelmodus zu wechseln, ist weiterhin vorhanden. Standardmäßig wird das Gerät durch langes Drücken der Aktionstaste stummgeschaltet und das taktile Feedback der Taste pulsiert dreimal. Bei beiden iPhone 15 Pro-Modellen wird neben der Uhrzeit in der Statusleiste ein durchgestrichenes Glockensymbol angezeigt, um anzuzeigen, dass der Lautlos-Modus aktiviert ist. Dies bleibt auch so, bis Sie die Aktionstaste erneut lange drücken, um die Stummschaltung des Geräts aufzuheben. Wenn Sie Ihr iPhone lieber in den lautlosen Modus versetzen möchten

So verlassen Sie den S-Modus unter Windows 10/11 So verlassen Sie den S-Modus unter Windows 10/11 Aug 03, 2023 pm 08:17 PM

Windows im S-Modus soll mehr Sicherheit und Leistung bieten, indem nur die Installation von Apps aus dem Microsoft Store zugelassen wird. Während diese Funktion dazu beiträgt, Malware zu verhindern und eine sichere Computerumgebung zu gewährleisten, kann sie Benutzer einschränken, die Anwendungen aus anderen Quellen als dem Microsoft Store installieren möchten. Wenn Sie sich in dieser Situation befinden und sich ständig fragen, wie Sie in Windows 10/11 aus dem S-Modus wechseln können, dann sind Sie bei uns genau richtig, denn wir zeigen Ihnen, wie Sie mit zwei verschiedenen Methoden in Windows 10/11 wechseln können Die Schritte zum S-Modus stellen sicher, dass Sie die Freiheit genießen können, Apps von jedem beliebigen Ort aus zu installieren. Erfahren Sie, wie Sie in Windows aus dem S-Modus wechseln

Anleitung zur Verwendung des Standby-Modus in iOS 17 Anleitung zur Verwendung des Standby-Modus in iOS 17 Aug 22, 2023 pm 04:01 PM

Mit iOS17 kommt der Standby-Modus auf das iPhone. Diese Anleitung soll Ihnen zeigen, wie Sie diese Funktion auf Ihrem iPhone verwenden. Der Standby-Modus ist eine bahnbrechende Funktion, die das iPhone in ein dynamisches, immer eingeschaltetes Smart Display verwandelt. Wenn Ihr iPhone während des Ladevorgangs horizontal auf die Seite gelegt wird, aktiviert es den Standby-Modus. Dieser Modus präsentiert eine Vielzahl nützlicher Widgets, darunter unter anderem die aktuelle Uhrzeit, lokale Wetteraktualisierungen, eine Diashow Ihrer Lieblingsfotos und sogar Steuerelemente für die Musikwiedergabe. Ein wesentlicher Vorteil dieses Modus ist die Möglichkeit, Benachrichtigungen anzuzeigen, sodass Benutzer diese anzeigen und mit ihnen interagieren können, ohne ihr iPhone vollständig aufwecken zu müssen. So verwenden Sie den Standby-Modus Damit der Standby-Modus ordnungsgemäß funktioniert, muss auf Ihrem iPhone Folgendes ausgeführt werden: i

Wie aktiviere ich „Notepad++ Dark Mode' und „Notepad++ Dark Theme'? Wie aktiviere ich „Notepad++ Dark Mode' und „Notepad++ Dark Theme'? Oct 27, 2023 pm 11:17 PM

Notepad++ Dark Mode v8.0 hat keine Parameter, Notepad++ ist der nützlichste Texteditor. Jede unter Windows 10 ausgeführte App unterstützt den Dunkelmodus. Sie können Webbrowser wie Chrome, Firefox und Microsoft Edge benennen. Wenn Sie mit Notepad++ arbeiten, kann der standardmäßig weiße Hintergrund Ihre Augen schädigen. Entwickler haben Version 8 von Notepad++ den Dunkelmodus hinzugefügt. Hier erfahren Sie, wie Sie ihn aktivieren. Aktivieren Sie Notepad für Windows 11/10 ++. Dunkler Modus. Starten Sie Notepad ++. Klicken Sie auf „Einstellungen“ > „Einstellungen“ > „Dunkler Modus“. Wählen Sie „Dunkelmodus aktivieren“, um Notepad neu zu starten

See all articles