java深层学习
快乐荆棘鸟
磨炼性格以微笑
面对痛苦是人生
展开
-
修改和编译spring源码,构建jar(spring-context-4.0.2.RELEASE)
转载自: https://blog.csdn.net/boling_cavalry/article/details/73139161上周在定位问题的时候,发现有个异常是在spring构建bean的时候抛出的,为了查看更详细的信息,决定修改spring-context-4.0.2.RELEASE.jar中的CommonAnnotationBeanPostProcessor类的代码,在里面打印出更详...转载 2018-09-28 15:45:11 · 454 阅读 · 0 评论 -
自己动手写把”锁”---终极篇
锁是整个Java并发包的实现基础,通过学习本系列文章,将对你理解Java并发包的本质有很大的帮助。前边几篇中,我已经把实现锁用到的技术,进行了一一讲述。这其中有原子性、内存模型、LockSupport还有CAS,掌握了这些技术,即使没有本篇,你也完全有能力自己写一把锁出来。但为了本系列的完整性,我在这里还是把最后这一篇补上。先说一下锁的运行流程:多个线程抢占同一把锁,只有一个线程能抢占成功,抢...转载 2019-07-31 15:20:43 · 172 阅读 · 0 评论 -
自己动手写把”锁”---LockSupport深入浅出
本篇是《自己动手写把"锁"》系列技术铺垫的最后一个知识点。本篇主要讲解LockSupport工具类,它用来实现线程的挂起和唤醒。LockSupport是Java6引入的一个工具类,它简单灵活,应用广泛。一、简单俗话说,没有比较就没有伤害。这里咱们还是通过对比来介绍LockSupport的简单。在没有LockSupport之前,线程的挂起和唤醒咱们都是通过Object的wait和notify...转载 2019-07-31 11:25:31 · 152 阅读 · 0 评论 -
自己动手写把”锁”之---锁的作用
前序这是一个系列文章,前边几篇比较基础,主要为了后续做准备。熟悉的朋友可以直接跳过看后续的文章。本主题很重要,学完这个系列,你将会对Java并包有一个透彻的原理性的认识。线程池技术、阻塞队列、信号量、原子性操作等等所用的基础技术都会在这系列的文章中讲到。学完之后,大家可以自己实现一个CountDownLatch来练练手。正文都知道,现在处理器的核数越来越多,为充分利用其计算资源,服务端编程...转载 2019-07-31 11:00:21 · 105 阅读 · 0 评论 -
自己动手写把”锁”之---JMM和volatile
一、JAVA内存模型关于Java内存模型的文章,网上真的数不胜数。在这里我就不打算说的很详细、很严谨了。只力求大家能更好的理解和运用,为后边的技术点做铺垫。内存模型并不是Java独有的概念,而是我们的计算机硬件平台的一个概念。内存模型描述了程序中变量如何在从内存读出、以及何时写会内存的底层细节。我们知道,程序运行其实就是CPU和内存的频繁交互的过程。随着CPU的快速发展,CPU的执行速度越来...转载 2019-07-31 11:00:35 · 85 阅读 · 0 评论 -
自己动手写把”锁”---原子性操作
转载自:https://www.cnblogs.com/qingquanzi/p/8215286.html所谓的原子性,就是在执行过程中不会被线程调度机制打断的操作,这种操作从开始就一直运行到结束,中间不存在任何上下文切换。还是以上篇讲到的x++操作为例。这是一个典型的‘读改写’的操作,在多线程的情况下,必须需要硬件的支持来保证‘读改写’的原子性,底层原理可以简单理解,通过锁总线的方式来实现。...转载 2019-07-31 11:00:47 · 141 阅读 · 0 评论 -
组内分享java多线程进阶系列--1
在这里插入图片描述转载 2019-05-09 20:14:26 · 140 阅读 · 0 评论 -
堆外缓存
转载自:https://www.cnblogs.com/scy251147/p/9634766.html堆内缓存的劣势事物都是有两面性的,堆内缓存在JVM的管理下,纵然无可挑剔,但是在GC过程中产生的程序小停顿和程序大停顿,则像一把利剑一样,斩断了对构造出完美高并发系统的念想。简单的以HashMap这个JDK自带的缓存组件为例,benchmark结果如下:Benchmark ...转载 2019-01-14 21:06:12 · 1724 阅读 · 0 评论 -
缓存分析图
转载自:https://blog.csdn.net/wee616/article/details/81071491转载 2019-01-14 19:20:30 · 101 阅读 · 0 评论 -
controller中 @value 值无法注入
转载自:https://blog.csdn.net/mountain1164528154/article/details/79425521在使用spring(未涉及springboot)进行读取配置文件中的属性值时,在controller中 @value 值无法注入,配置正确,配置文件也找得到。话不多说,先上代码:由于使用的是spring配置文件方式,web.xml中contextCo...转载 2019-01-08 17:59:52 · 636 阅读 · 0 评论 -
Redis技术分享第二期
原创 2018-11-28 10:33:34 · 169 阅读 · 0 评论 -
理解Java中的ThreadLocal
转载自:https://droidyue.com/blog/2016/03/13/learning-threadlocal-in-java/ThreadLocal是什么ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。用法简介创建,支持泛型...转载 2018-11-30 21:00:56 · 108 阅读 · 0 评论 -
Redis技术分享第一期
原创 2018-11-14 16:06:35 · 182 阅读 · 0 评论 -
同步/异步/阻塞/非阻塞/进程/线程
转载自:https://juejin.im/post/5bc69ecee51d45395d4f4072同步、异步、阻塞、非阻塞,这四个概念很少人可以说清楚,不信的话,你可以先自己试着写下来同步和异步关注维度:消息的通信机制(synchronous communication/asynchronous communication)判断标准:调用者是否主动等待被调用者的返回结果同步的理论说明...转载 2018-11-14 14:47:13 · 137 阅读 · 0 评论 -
spring+mybatis启动NoClassDefFoundError异常分析三部曲之一:稳定重现问题
转载自: https://blog.csdn.net/boling_cavalry/article/details/73071020上一周,web项目在发布的时候应用启动失败了,错误信息如下:org.springframework.web.context.ContextLoader] - Context initialization failedjava.lang.NoClassDefFou...转载 2018-10-08 16:48:45 · 199 阅读 · 0 评论 -
线程池的工作原理与源码解读
随着cpu核数越来越多,不可避免的利用多线程技术以充分利用其计算能力。所以,多线程技术是服务端开发人员必须掌握的技术。线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就引入了线程池技术,避免频繁的线程创建和销毁。在Java用有一个Executors工具类,可以为我们创建一个线程池,其本质就是new了一个ThreadPoolExecutor对象。线程池几乎也是面试必考问题。本节结合源代...转载 2019-08-01 17:47:08 · 178 阅读 · 0 评论