关于jdk9:JDK9-响应式流使用详解

JDK9响应式流应用详解上文中咱们简略提到了 JDK9 中 Flow 接口中的动态外部类实现了响应式流的 JAVA API,并且提供了一个一个 Publisher 的实现类 SubmissionPublisher。本文将先梳理一下接口中具体的解决流程,而后再以几个调用者的例子来帮忙大家了解。 JDK9 中的实现 再放上一下上文中的响应式流的交互流程: 订阅者向发布者发送订阅申请。 发布者依据订阅申请生成令牌发送给订阅者。 订阅者依据令牌向发布者发送申请 N 个数据。 发送者依据订阅者的申请数量返回 M(M<=N)个数据 反复 3,4 数据发送结束后由发布者发送给订阅者完结信号 该流程的角度是以接口调用的交互来说的,而思考理论的 coding 工作中,咱们的调用流程其实为: 创立发布者 创立订阅者 订阅令牌交互 发送信息 接下来咱们依照这个流程来梳理一下代码细节。 创立发布者对于实现响应流的最开始的步骤,便是创立一个发布者。之前提到在 JDK9 中提供了一个发布者的简略实现 SubmissionPublisher。SubmissionPublisher 继承自 Flow.Publisher,他有三种构造函数: public SubmissionPublisher() { this(ASYNC_POOL, Flow.defaultBufferSize(), null);}public SubmissionPublisher(Executor executor, int maxBufferCapacity) { this(executor, maxBufferCapacity, null);}public SubmissionPublisher(Executor executor, int maxBufferCapacity, BiConsumer<? super Subscriber<? super T>, ? super Throwable> handler)SubmissionPublisher 将应用Executor作为“线程池”向订阅者发送信息。如果须要须要设置线程池的话能够本人传入,否则的话再无参的构造函数中将默认应用ForkJoinPool类的commonPool()办法获取,即无餐构造方法中的 ASYNC_POOL 动态变量。 SubmissionPublisher 会为每一个订阅者独自的建设一个缓冲空间,其大小由入参maxBufferCapacity决定。默认状况下间接应用Flow.defaultBufferSize()来设置,默认为 256。如果缓冲区满了之后会依据发送信息时候的策略确定是阻塞期待还是摈弃数据。 ...

February 17, 2022 · 3 min · jiezi

聊聊java9的classloader

序本文主要研究一下java9的classloaderjava9之前的classloaderbootstrap classloader加载rt.jar,jre/lib/endorsedext classloader加载jre/lib/extapplication classloader加载-cp指定的类java9及之后的classloaderbootstrap classloader加载lib/modulesjava.base java.security.sasljava.datatransfer java.xmljava.desktop jdk.httpserverjava.instrument jdk.internal.vm.cijava.logging jdk.managementjava.management jdk.management.agentjava.management.rmi jdk.naming.rmijava.naming jdk.netjava.prefs jdk.sctpjava.rmi jdk.unsupportedext classloader更名为platform classloader,加载lib/modulesjava.activation* jdk.accessibilityjava.compiler* jdk.charsetsjava.corba* jdk.crypto.cryptokijava.scripting jdk.crypto.ecjava.se jdk.dynalinkjava.se.ee jdk.incubator.httpclientjava.security.jgss jdk.internal.vm.compilerjava.smartcardio jdk.jsobjectjava.sql jdk.localedatajava.sql.rowset jdk.naming.dnsjava.transaction jdk.scripting.nashornjava.xml.bind* jdk.security.authjava.xml.crypto jdk.security.jgssjava.xml.ws* jdk.xml.domjava.xml.ws.annotation* jdk.zipfsapplication classloader加载-cp,-mp指定的类jdk.aot jdk.jdepsjdk.attach jdk.jdijdk.compiler jdk.jdwp.agentjdk.editpad jdk.jlinkjdk.hotspot.agent jdk.jshelljdk.internal.ed jdk.jstatdjdk.internal.jvmstat jdk.packjdk.internal.le jdk.policytooljdk.internal.opt jdk.rmicjdk.jartool jdk.scripting.nashorn.shelljdk.javadoc jdk.xml.bindjdk.jcmd jdk.xml.wsjdk.jconsole小结java9模块化之后,对classloader有所改造,其中一点就是将ext classloader改为platform classloader,另外模块化之后,对应的classloader加载各自对应的模块。docjava9-three-level hierarchy of class loaders

August 30, 2018 · 1 min · jiezi