- 浏览: 78480 次
最新评论
-
kevinflynn:
...
ThreadLocal 源码分析 -
kevinflynn:
[url=aaaa][/url]
ThreadLocal 源码分析 -
kevinflynn:
学习到了 感谢楼主。
ThreadLocal 源码分析
文章列表
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 隐式的获取,释放锁,使用起来更加的方法,但 ...