![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术永无止境
文章平均质量分 91
diaog
简书主页:https://www.jianshu.com/u/709a9269f652
展开
-
从源码出发,理解SpringMVC
写在最前一边读源码,一边写理解。连续写了一周,终于大概搞定了。之前想一次性就搞定的,后来发现自己想的太简单了。所以准备之后再写写HandlerMapping、handlerAdapter以及ViewResolver。写的过程有些痛苦,写完收获很大,推荐将SpringMVC作为源码阅读的起点。一、认识SpringMVCMVC模式是什么?MVC模式是一种架构模式,用于将代码在数据、逻...原创 2019-08-29 20:04:58 · 97 阅读 · 0 评论 -
ThreadLocal
先来看看Jdk1.8对ThreadLocal的解释:JDK1.8定义:当前类提供线程本地变量。这些变量不同于正常变量,而是访问这些变量的每一个线程,都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal通常是类中private static字段,期望与线程的某一个状态相关联(例如用户ID或事务ID)。简单的来说,ThreadLocal是线程的本地变量,不用线程访问同一个Thr...原创 2019-09-30 19:01:40 · 120 阅读 · 0 评论 -
Java学习路线
写在最前总是在找工作时,才感叹没有珍惜时间。16年毕业,到现在仍在外包公司堆业务。身边的童鞋混的好的升值加薪,进大平台,混的一般的回老家。相比较之下,自己几年都没进步,浪费了青春。不过,有压力就有动力,这一个多月的努力,让自己增长了不少的信心。最好的开始永远就是现在,所以趁着今天有空,把学习路线规划一下,然后就按照这个路线,跟着自己的节奏,一步步的走。虽然可能已经走得晚点,也许会走得慢些,但...原创 2019-09-23 20:12:17 · 157 阅读 · 0 评论 -
Java线程池源码解析
Java线程池基础传送门:Java线程池基础及AtomicIntegerJava线程池原理除了newScheduledThreadPool,其他线程池都是基于ThreadPoolExecutor实现的。线程池内部状态既然是线程池,必然存在生命周期:运行中,关闭,停止等。ThreadPoolExecutor是用AtomicInteger变量ctl前三位表示这个状态的,另外用了后29位表示线程...原创 2019-09-22 15:44:20 · 422 阅读 · 0 评论 -
Java线程池基础及AtomicInteger
线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量(来源百度百科)Java1.5中,引入Executor框架把任务的提交和执...原创 2019-09-21 15:42:06 · 717 阅读 · 0 评论 -
Java内存模型
内存模型在多CPU系统上,每个CPU都有多级缓存,一般分为L1,L2,L3,正是因为这些缓存的存在,提供了数据的访问性能(CPU的处理速度大于硬盘速度),也减轻了数据总数的传输压力,同时也带来了一些挑战,比如两个CPU同时访问一个内存地址,会发什么什么?在什么条件下可以看到相同结果。这些都是需要去解决的。在CPU层面,内存模型的定义是充分必要的,其他CPU的写入操作对当前CPU是可见的,当前C...原创 2019-09-18 20:15:34 · 79 阅读 · 0 评论 -
ReentrantLock非公平锁与公平锁源码解析
这篇从源码入手,深入了解ReentrantLock的非公平锁和公平锁的实现过程。之前已经写过ReentrantLock-基础,ReentrantLock的实现基于AQS,所以还需要先了解同步器AbstractQueueSynchronizer。非公平锁 ReentrantLock lock = new ReentrantLock(false); try { lock.l...原创 2019-09-15 17:44:41 · 161 阅读 · 0 评论 -
ReentrantLock-基础
在JDK中独占锁的实现除了内部锁Synchronized,还可以使用ReentrantLock。内部锁与可重入锁的对比在JDK1.6以后,性能上两者差距已经不明显,因为对synchronized底层进行了优化,很多地方采用了CAS操作。在Java虚拟机上更偏向于内部锁的使用,官方也提倡在满足条件的情况下,优先选择内部锁。两者都是独占锁,只允许一个线程进入临界区。synchronized的加...原创 2019-09-15 15:08:02 · 116 阅读 · 0 评论 -
同步器AbstractQueueSynchronizer
写在最前在Jdk1.5之后,并发包中新增了Lock接口用来实现锁的功能,它提供了与synchronized关键字类似的同步功能。在Lock的实现类中,常用的ReetrantLock、ReadWriteLock,内部实现都依赖于AQS类(线程排队),AQS是为Java并发同步机制提供的底层支持。所以在了解ReetrantLock之前,先学习AQS的内部原理。AQS定义public abstra...原创 2019-09-11 19:39:25 · 205 阅读 · 0 评论 -
内置锁synchronized原理解析
写在最前内置锁是JVM提供的最便捷的线程同步工具,在代码块或方法声明上添加synchronized关键字即可使用内置锁。最开始学习多线程时,遇到多线程并发问题就是使用synchronized,后来发现synchronized关键字并不那么灵活。为了解决synchronized笨重的问题,JDK1.5中加入了java.util.concurrent.locks 包。JDK1.6中对synchro...原创 2019-09-09 08:48:33 · 800 阅读 · 0 评论 -
Java线程实现和线程状态
写在最前之前写了ConcurrentHashMap,无论是1.8还是1.7,其中都会涉及锁Synchronized和ReentrantLock;锁的概念是为了解决线程安全问题;所以还是从线程开始写起。这篇文章主要是写写Java线程的实现和线程的状态,以及上下文的概念,也有一些不完善的地方,会持续查缺补漏。Java线程的实现Java线程模型是基于操作系统原生线程模型的实现,在JDK中,win...原创 2019-09-07 14:20:00 · 1323 阅读 · 1 评论 -
ConCurrentHashMap的深入了解
简介通过之前学习HashMap,知道在多线程环境下,同时进行HashMap的put操作时,可能造成死循环,所以需要一个更安全的Map在多线程环境下使用。了解HashMap传送门:HashMap的深入了解HashTable作为一个历史遗留类,所有线程去竞争同一把锁。当一个线程访问HashTable时,其他线程访问HashTable同步方法,就会进入等待或轮训状态,效率极其低下。在 JDK1....原创 2019-09-03 19:11:44 · 288 阅读 · 0 评论 -
了解ClassLoader
在读Spring源码时,比如DefaultResourceLoader,构造时需要传入ClassLoader。索性先搞清楚ClassLoader,再继续阅读源码。ClassLoader是用来加载Class的。它负责将Class的字节码形式转换成内存形式的Class对象。字节码可以来自磁盘文件的*.class,也可以是jar包里的*.class,也可以来自远程服务器提供的字节流,字节码本质是一...原创 2019-10-09 23:18:14 · 142 阅读 · 0 评论