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