`
文章列表
MonitorFactory 创建 Monitor 的接口 @SPI("dubbo") public interface MonitorFactory {       /**      * Create monitor.      *      * @param url      * @return monitor      */     @Adaptive("protocol")     Monitor getMonitor(URL url);   }     MonitorService 接口定义收集和查询监控 ...
在看 injvm 协议的时候,我们还是从 InjvmProtocol 类开始看. 这是它最重要的两个方法,按照我们前面分析的内容,export 方法是启动服务,但是这个是本地服务,所以不需要启动服务. public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {         return new InjvmExporter<T>(invoker, invoker.getUrl().getServiceKey(), exporterMap);     }    ...
在看 dubbo rest 协议的时候,很多东西都不是很懂,特别是看测试用例的时候,例如这个: public void testRestProtocol() {         URL url = URL.valueOf("rest://127.0.0.1:5342/DemoService1/rest/say?version=1.0.0&interface=org.apache.dubbo.rpc.protocol.rest.DemoService");         DemoServiceImpl server = new DemoServiceImpl(); ...
今天在看 dubbo http 协议的时候,发现它是使用 jsonrpc 实现的. 当时就在想能否基于 httpclient 实现了? 答案是肯定的。 做法如下: 1.需要为接口实现一个代理类,在代理类中发起 http 请求 2.在发送 http 请求的时候,需要把方法名,参数序列化,放入到 request 的 header 中(我是这么干的) 3.在服务端从 header 中获取方法名和参数,通过反射执行方法,并把结果放入到 response 中 4.客户端接收结果,并将结果转换为对应的类型
今天看 dubbo http 协议的时候,觉得很好玩,开始的理解是 http 协议应该和 dubbo 协议一样,有编解码等. 但是等自己看了后,发现其实不是我想的那样. dubbo 实现了三类 http 协议的服务端. 1.借用服务端的服务器 2.使用 jetty 3.使用 tomcat 本质还是 Servlet 那一套,一个请求过来了,在 servlet 中进行处理,然后返回数据给用户
说明:本篇文章是在阅读《深入理解Java虚拟机》过程中的一些笔记和分析,由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步! 该项目的地址:https://github.com/xiaoheng1/jvm-read ...
基于句柄方式访问Java对象为啥会使用两个指针? 我觉得一个指针就可以实现了呀,句柄指向对象的实例数据,然后对象的类型指针指向方法区 中的类元数据信息不就好了吗?为啥句柄中还需要定义一个类型指针,单独指向方法区中的类 类元数据信息了?
说明:本篇文章是在阅读《Java 并发编程艺术》过程中的一些笔记和分析,由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步! 该项目的地址:https://github.com/xiaoheng1/concurrent-pr ...
Java 中常用的并发工具有 CountDownLatch、CyclicBarrier 和 Semaphore. 1.CountDownLatch 等待所线程完成. 比如说,我将一个计算任务拆分成多个任务,然后多个线程分别计算,最后等所有任务计算完成后,在继续执行. 其实还有一个思路可以实现该功能,join. 但是 join 方法是有局限的,join 方法用于当前执行线程等待 join 线程执行结束,其实现原理是 不停的检查 join 线程是否存货,如果 join 线程存货,则让当前线程永远等待. 现在来看下 CountDownLatch 的实现原理. CountDownLatch 的 ...
说明:本篇文章是在阅读《Java 并发编程艺术》过程中的一些笔记和分析,由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步! 该项目的地址:https://github.com/xiaoheng1/concurrent-programming 欢迎有兴趣的小伙伴加入,一起讨论、分析,共同进步! atomic 包中的 13 个类,属于 4 中类型的原子更新方式. (1)原子更新基本类型 (2)原子更新数组 (3)原子更新引用 (4)原子更新属性 atomic 包里的类基本都是使用 Unsafe 实现的包装类. 1.原子更新基本类型 (1) Atom ...
说明:本篇文章是在阅读《Java 并发编程艺术》过程中的一些笔记和分析,由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步! 该项目的地址:https://github.com/xiaoheng1/concurrent-programming 欢迎有兴趣的小伙伴加入,一起讨论、分析,共同进步! 1.ConcurrentHashMap 的实现原理和使用 ConcurrentHashMap 是线程安全 Map. 为啥不用 HashTable 了?因为 HashTable 效率太低了,比如说在进行 put 操作的时候,read 操作就 用不了,所以一个 ...
补充点额外知识: CompletableFuture 现在 只需要知道是一个和异步任务相关的东西即可. AbstractTimerTask 实现的是 TimerTask 接口,先来分析下这个抽象类,因为这个类是其他任务类的父类.     // channel 集合     private final ChannelProvider channelProvider;     // 下次任务执行的间隔     private final Long tick;     // 是否取消     protected volatile boolean cancel = false; lastRead ...
remote 层关注 transport 和 exchange 这两个包即可. 因为这两个包下封装了通讯相关的内容. 先来补充点额外知识: 1.Endpoint 是端点的概念,我们可以看到,对其抽象,最主要的是一个 send 方法,用于发送数据. 但是我有一个疑问?为啥 Endpoint 不抽象出 receive ? 2.Endpoint 的 send 方法和 ChannelHandler 的 sent 方法的区别和联系? 刚刚我看了下 netty4 下面的 NettyServerHandler 和 NettyChannel,发现 ChannelHandler 中定义的 sent 方法 ...
dubbo 是支持多种序列化方式的,那么它就必须在此基础上做一层封装,来统一序列化层的接口. 现在我们拿 Java 中的序列化来讲解 dubbo 是如何进行封装的. 如果使用 java 序列化,需要做那几步了? 1.实现 java.io.Serializable 2.new ObjectOutputStream,并调用 writeObject 方法写对象 反序列化: 1.new ObjectInputStream 2.调用 readObject 方法读对象. 那么现在 dubbo 需要在此基础上,可以自由使用多种序列化方式,该如何做了? 1.是不是需要一个类似 ObjectO ...
说明:本篇文章是在阅读《Java 并发编程艺术》过程中的一些笔记和分析,由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步! 该项目的地址:https://github.com/xiaoheng1/concurrent-programming 1.Java 中的锁,值的是 Lock, 它和 synchronized 实现的功能类似,但是其更加的强大,比如说超时获取锁等. 世上没有两全的东西,越是功能强大 的东西,那么它的复杂性肯定会增加. Lock 和 synchronized 相比,synchronized 隐式的获取,释放锁,使用起来更加的方法,但 ...
Global site tag (gtag.js) - Google Analytics