2017-09-23 21 views
5

Najpierw muszę powiedzieć, że nie mam zbyt dużego doświadczenia z programowaniem reaktywnym.Jak korzystać z interfejsów Java 9 Flow/jaki jest sens dołączania ich do Java 9?

Ponieważ w JDK 9 jest tylko kilka interfejsów (Flow and its nested interfaces), JDK 9 oczywiście nie zawiera reaktywnej biblioteki takiej jak RxJava.

W Javadoc, istnieją pewne przykłady implentations of Publisher, Subscription i Subscriber. Ale wydaje się, że są one dość niskiego poziomu i nie mają żadnych operatorów reaktywnych ani nie obsługują przeciwciśnienia.

Jaki jest sens włączenia tych interfejsów do JDK?

Czy dostawcy bibliotek reaktywnych mają z nich korzystać, aby implementacje Java (takie jak RxJava) używały wspólnego zestawu interfejsów? (podobny do JPA i Hibernate?)

+0

Co więcej, czy Java 9 obsługuje obserwowalne metody rx-java? Czy Java 9 podała tylko infrastrukturę dla rx-java? –

+3

Czy zrobiłeś wcześniej badania - np. Czytając odpowiedni koder? – GhostCat

+1

Aby dodać do wskazanego obiektu @GhostCat, spójrz na [JEP # 266] (http://openjdk.java.net/jeps/266). – nullpointer

Odpowiedz

8

Pozwala głównie sama Java używać programowania reaktywnego wewnętrznie w jakiejś przyszłej wersji, takich jak Reaktywne JDBC, Networking, IO itp. W koncepcji, służy również jako nowy punkt wymiany dla interoperacyjności, jednak taki punkt kontrolny już istnieje ze strumieniami reaktywnymi kierowanymi do znacznie większej liczby odbiorców za pośrednictwem wymagań Java 6.

Jak już wspomniano, posiadanie tego 4 interfejsów i samego siebie ma ograniczone zastosowanie. Jeśli Java ma metody rozszerzenia podobne do Kotlin i C#, włączenie interfejsów może mieć znacznie bardziej interesujący wpływ.

Niestety, oznacza to również, że istniejące biblioteki muszą wykorzystywać mosty do konwersji między Java 9 Flow a Reactive-Streams i/lub ponownie zaimplementować całą bibliotekę za pomocą API Java 9 Flow - wycinanie każdego bez Java 9 (tj. Android) .

Główne biblioteki mają już takie mosty (RxJava 2 Jdk 9 Interop, Reactor-Core Interop), a strumienie reaktywne będą miały numer own bridge eventually. Istnieje również napisany dla i z funkcjami Java 9.

+2

Aby dodać do tej imponującej listy, istnieje * * Backport dla Androida: [strumień strumieniowy] (https://sourceforge.net/projects/streamsupport/) – Sartorius

2

Celem interfejsu przepływu jest zapewnienie "standardu dla asynchronicznego przetwarzania strumienia z nie blokującym przeciwciśnieniem". Istnieje już wiele rozwiązań, które to umożliwiają (np. Rx), ale dzięki wprowadzeniu wspólnego interfejsu maksymalizują one interoperacyjność. Ważne jest, aby ciśnienie wsteczne było kluczowym punktem, pod ciśnieniem zwrotnym jest to, że jeśli producent daje wywołanie zwrotne, konsument może wywołać to oddzwanianie szybciej niż to, co może obsłużyć producent.

Łatwo jest osiągnąć ZMNIEJSZENIE ciśnienia wstecznego, uruchamiając je na tej samej nitce, tak aby konsument i producent blokowali się nawzajem.

Ten interfejs przepływu pozwoli nam osiągnąć NON BLOCKING.

których szczegóły są opisane bardziej szczegółowo w tym linkiem (a także informacje na temat korzystania z interfejsu): https://aboullaite.me/java-9-new-features-reactive-streams/

Powiązane problemy