2018年1月15日
摘要: 使用示例: SynchronousQueue的put和take是阻塞的,一个线程put,然后阻塞,等待另一个线程take;或者一个线程take,然后阻塞,等待另一个线程put。 阻塞线程: 唤醒线程: Executors.newCachedThreadPool使用的队列是SynchronousQue 阅读全文
posted @ 2018-01-15 18:11 偶尔发呆 阅读(729) 评论(0) 推荐(1)
摘要: Executors 类对 ThreadPoolExecutor 的构造函数进行了封装,使用该类可方便地创建线程池。 1. newFixedThreadPool 2. newCachedThreadPool 分析任务入队和出队,分别对应 ThreadPoolExecutor 类的 execute 方法 阅读全文
posted @ 2018-01-15 16:04 偶尔发呆 阅读(442) 评论(0) 推荐(0)
  2018年1月11日
摘要: 1. 在Breakpoints页面,选中断点然后右键,选择"Breakpoint Properties" 2. 勾选Conditional,并输入条件。这样,当name等于"dubbo"时,就会暂停。 阅读全文
posted @ 2018-01-11 14:54 偶尔发呆 阅读(2766) 评论(0) 推荐(1)
  2018年1月10日
摘要: 了解4个概念:接口,实现类,wrapper,adaptive。 扩展是接口实现类被wrap之后的对象,adaptive扩展是动态生成的类(例如Dubbo$Adaptive类)。 dubbo框架为接口指定一个同名配置文件,文件中定义了实现类(包括 wrapper)。 以dubbo-2.5.2.jar/ 阅读全文
posted @ 2018-01-10 18:11 偶尔发呆 阅读(527) 评论(0) 推荐(0)
  2018年1月8日
摘要: 考虑这样一种情况,由于网络延时,consumer先抛出超时异常,一段时间后又收到了已经超时的响应,dubbo是怎么处理的? 拆分为3步看: 1. consumer的DubboResponseTimeoutScanTimer进行扫描 DubboResponseTimeoutScanTimer负责扫描响 阅读全文
posted @ 2018-01-08 12:24 偶尔发呆 阅读(2119) 评论(0) 推荐(0)
摘要: dubbo中的请求和响应是如何关联起来的呢? 每一个请求和响应共用同一个id。 consumer创建请求的调用栈: provider 创建响应: dubbo的响应: 请求-响应对示例: 阅读全文
posted @ 2018-01-08 10:13 偶尔发呆 阅读(983) 评论(0) 推荐(0)
  2018年1月5日
摘要: 标号用于控制循环执行流程: 多层循环,使用break可以直接退出for循环,使用continue直接开始下一轮外层循环。 阅读全文
posted @ 2018-01-05 16:59 偶尔发呆 阅读(263) 评论(0) 推荐(0)
  2018年1月4日
摘要: 1. 创建线程池 创建线程池的调用栈如下: SimpleDataStore把线程池存放在map中。 executor = (ExecutorService) ExtensionLoader.getExtensionLoader(ThreadPool.class).getAdaptiveExtensi 阅读全文
posted @ 2018-01-04 15:44 偶尔发呆 阅读(3498) 评论(0) 推荐(0)
摘要: https://stackoverflow.com/questions/8517121/java-what-is-the-difference-between-init-and-clinit# <init> is the (or one of the) constructor(s) for the 阅读全文
posted @ 2018-01-04 10:21 偶尔发呆 阅读(694) 评论(0) 推荐(0)
  2018年1月3日
摘要: 一般情况,consumer发送请求时,创建一个DefaultFuture对象,然后阻塞并等待响应。DefaultFuture类,封装了请求和响应: 1. consumer发送请求,阻塞等待响应。 调用代码: 调用代理对象的sayHello方法,代理类proxy0由javassist动态生成,代码大致 阅读全文
posted @ 2018-01-03 16:37 偶尔发呆 阅读(1086) 评论(0) 推荐(0)