240 发简信
IP属地:重庆
  • 感谢!写的很好,方便我理解了不少。
    不过最后一句,虽然核心线程一直在自旋尝试获取任务,但它是从阻塞队列里take的,在BlockingQueue是空的情况下,take()操作是阻塞的;以ArrayBlockingQueue为例,他的take方法核心是while (count == 0) notEmpty.await(); 所以核心线程此时仍然是挂起的,并不会占用过多CPU~
    如果有疏忽的话麻烦作者或者哪位大佬提醒下,感激不尽~

    线程池执行原理及源码解析(execute、addWorker、runWorker、getTask、processWorkerExit 执行流程详解)

    这几天秋招面试的时候问到了线程池原理,因为线程池这块都是只了解API,当时没能很好的回答面试官提出的问题,花了整整一晚上结合别人的博客看了下源码,了解了线程池的大概执行流程,...

  • 最后那张图对应的大牛是sentinel的负责人吧

    Hystrix指标窗口实现原理

    一、引子 Hystrix是一个熔断中间件,能够实现fast-fail并走备用方案。Hystrix基于滑动窗口判定服务失败占比选择性熔断。滑动窗口的实现方案有很多种,指标计数也...

  • @method_5478 是的 如果没进应该是spring aop配置的问题 导致切面没有被代理上

    @HystrixCommand属性动态修改

    @HystrixCommand的使用对于应用开发来说非常方便,但也有个限制就是像动态修改注解的属性就很麻烦。 因为被该注解标注的方法在执行前是被com.netflix.hys...

  • 120
    Hystrix指标窗口实现原理

    一、引子 Hystrix是一个熔断中间件,能够实现fast-fail并走备用方案。Hystrix基于滑动窗口判定服务失败占比选择性熔断。滑动窗口的实现方案有很多种,指标计数也...

  • 楼主写的挺好的,基本上可以拿来直接用,我来补充一小点:
    处于性能方面的考虑,HystrixCommandAspect这个源代码的切面的advice在第一次拦截到属性后,会把属性放到缓存里面(com.netflix.hystrix.strategy.properties.HystrixPropertiesFactory#commandProperties),且不会自动刷新,所以上面的代码只能在第一次调用的时候生效,以后直接走缓存了.经过测试,如果上面的memberValues.put("value", "6000")改成memberValues.put("value", value);这种动态赋值,第一次调用之后再改变value的值,是没有效果的.
    解决办法也很简单.既然有缓存,那我手动清空缓存就行了,hystrix也提供了静态共有的清空缓存的方法--HystrixPropertiesFactory.reset();把这行代码加到advice第一行,就能实现实时动态刷新属性了.

    @HystrixCommand属性动态修改

    @HystrixCommand的使用对于应用开发来说非常方便,但也有个限制就是像动态修改注解的属性就很麻烦。 因为被该注解标注的方法在执行前是被com.netflix.hys...

  • 120
    深入理解 Java G1 垃圾收集器GC调优[转]

    http://blog.jobbole.com/109170/#comment-159599 本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他...