In diesem Artikel wird hauptsächlich die Verwendung von Java -gleichzeitigen Programmierungen und Zukunft untersucht und relevante Beispielcodes und Details sind wie folgt.
Wir alle wissen, dass es zwei Möglichkeiten gibt, Multi-Threading zu implementieren. Einer besteht darin, Thread zu erben und der andere ist die Implementierung von Runnable. Beide Arten haben jedoch einen Defekt, und das Rückgabeergebnis kann nach Abschluss der Aufgabe nicht erzielt werden. Um das Rückgabeergebnis zu erhalten, müssen Sie Callable verwenden. Die Callable -Aufgabe kann einen Rückgabewert haben, aber den Rückgabewert nicht direkt von der Callable -Aufgabe abrufen. Wenn Sie den Rückgabewert der Callable -Aufgabe erhalten möchten, müssen Sie die Zukunft verwenden. Daher werden Anrufe und zukünftige Modus normalerweise in Kombination verwendet.
Stellen Sie sich ein Szenario vor: Sie benötigen eine Postlistenschnittstelle. Zusätzlich zur Rückgabe der Postliste müssen Sie auch die List- und Kommentarliste der gleichen und Kommentar jedes Beitrags zurückgeben. Für Berechnungen von 10 Beiträgen auf einer Seite erfordert diese Schnittstelle 21 Mal Zugriff auf die Datenbank. Sobald der Zugriff auf die Datenbank basierend auf 100 ms und 21 -mal berechnet wird, beträgt die kumulative Zeit 2,1 Sekunden. Diese Reaktionszeit ist wahrscheinlich unbefriedigend. Was zu tun? Asynchrone Transformation von Schnittstellen.
Nachdem die Postliste herausgefunden hat, über die Postliste iterieren, 10 Threads in der Schleife starten und gleichzeitig die ähnliche Liste jedes Beitrags erhalten. Gleichzeitig werden 10 Threads eingerichtet, um die Kommentarliste jedes Beitrags zu erhalten. Nach dieser Transformation wird die Reaktionszeit der Schnittstelle stark auf 200 ms verkürzt. Zu diesem Zeitpunkt müssen wir Callabel kombiniert mit der Zukunft verwenden, um dies zu erreichen.
private list <postresponse> createPostResponSelist (Seite <postresponse> Seite, endgültige String userID) {if (page.getCount () == 0 || page == null || page.getList () == null) {return null; } // Die Postliste erhalten <postresponse> circleresponSelist = page.getList (); int size = circleresponSelist.size (); ExecutorService commentpool = Executors.NewFixedThreadpool (Größe); ExecutorService Supportpool = Executors.NewFixedThreadpool (Größe); Versuchen Sie {list <uture> commentFutUrelist = new ArrayList <Future> (Größe); if (circleresponSelist! endgültige String postuserID = postresponse.getUerId (); // Überprüfen Sie die Kommentarliste Callable <Liste <circlereviews >> CALLABLECOMMENT = NEW CALLABLE <LIST <LIST <Circlereviews >> () {@Override publiclist <circlereviews> call () löst Ausnahme aus {return circlereviewsbiz.getPostCorts (CircleId); }}; Future f = commentpool.submit (Callablecomment); commentFuturelist.add (f); // Überprüfen Sie die ähnliche Liste Callable <list <Circlezan >> Callablesupport = new Callable <list <Circlezan >> () {@Override publiclist <circlezan> call () löst Ausnahme aus {return Circlezanbiz.findlist (CircleId); }}; Zukünftige SupportFuture = SupportPool.Submit (Callablesupport); commentFuturelist.add (SupportFuture); }} // Erhalten Sie die Ausführungsergebnisse aller gleichzeitigen Aufgaben int i = 0; Postresponse temp = null; für (Future f: commentFuturelist) {temp = circleresponSelist.get (i); temp.setCompmentList ((list <Circlereviews>) f.get (); temp.setsupportList ((Liste <Circlezan>) f.get (); SupportPool.Shutdown ();Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über den Anwendungsbeispielcode von Java gleichzeitlich programmierbar und zukünftig. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!