![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
文章平均质量分 80
沉默是今晚的荷塘
这个作者很懒,什么都没留下…
展开
-
java中常用用具类介绍
java常用工具类原创 2021-02-28 19:19:47 · 454 阅读 · 0 评论 -
guava-1(集合操作)
guava是什么Guava是Java项目广泛第三方库,其中包括:集合 、缓存 、原生类型支持 、并发库 、通用注解 、字符串处理 、I/O 等等。 所有这些工具每天都在被java工程b师应用在业务服务中。集合再jdk1.7之前,原生jdk对集合操作并不友好,使用guava的集合很大程度上方便了我们对集合的操作。不可变集合新集合类型Multiset很方便获取集合中元素的个数public static void main(String[] args) { //此时也是使用gu原创 2020-08-16 18:21:27 · 319 阅读 · 0 评论 -
springboot整合Caffeine本地缓存
Caffeine基本配置配置类在项目中,有些数据往往读多写少,我们通常放入redis缓存中,但有时感觉大材小用,我们会把部分数据存入本地缓存中,我们前面讲到了,guava cache就是比较优秀的一种,在Spring Boot 2.0中将Caffeine取代Guava,已不再提供guava的支持。说到spring的支持,主要是很方便使用@Cacheable、@CachePut、@CacheEvict、@Caching等注解基本配置application.propertiesspring.cache.原创 2020-08-23 14:58:46 · 991 阅读 · 0 评论 -
从Condition到AQS
写在前面Condition源码学习AQSdemoCondition必须依赖lock,需要在锁下创建condition。类似wait、notify或notifyAll 与 synchronized 的关系咱们根据这个demo来解读condition代码public static void main(String[] args) { Lock lock = new ReentrantLock(); Condition condition = lock.newCondition();原创 2021-01-30 22:04:43 · 90 阅读 · 0 评论 -
ReentrantReadWriteLock源码分析
ReentrantReadWriteLock读写锁,本身也是有AQS实现的,主要分为独占与共享两种状态,我们知道AQS中使用state状态来区分是否获取到锁,在独占模式下如果state == 0说明没有获取到独占锁,state != 0说明有其他线程获取到独占锁。在共享模式下,如果state < 0代表没有获取到共享锁,在CountDownLatch中如果state 不等于 0说明获取不到共享锁,在Semaphore中state小于1获取不到共享锁。独占模式来说,0 代表可获取锁,1 代表锁被别原创 2021-02-09 12:19:39 · 175 阅读 · 3 评论 -
从CyclicBarrier到AQS
写在前面CyclicBarrier 源码学习AQSdemo就是让多个线程一起执行,多线程同时到达栅栏点,等到达栅栏点的线程等于count时,所有线程往下执行public static void main(String[] args) throws Exception { CyclicBarrier cyclicBarrier = new CyclicBarrier(11, new Runnable() { public void run() { System原创 2021-01-31 17:58:15 · 106 阅读 · 0 评论 -
从ReentrantLock到AQS
写在前面Doug Lea 的JUC源码写的是非常漂亮的,非常值得我们学习。我们慢慢一步步学习下JUC下的源码,我们在AOS(AbstractQueuedSynchronizer)开始学习吧。AQSAQS具备特性阻塞等待队列共享/独占公平/非公平可重入允许中断待续...原创 2021-01-14 22:48:37 · 130 阅读 · 0 评论 -
volatile原理详解
volatile关键字有如下两个作用保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。禁止指令重排序优化。volatile的可见性volatile无法保证原子性...原创 2021-01-14 10:10:26 · 291 阅读 · 0 评论 -
线程与JMM模型
线程线程的概念现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度CPU的最小单元是线程,也叫轻量级进程。线程的实现可以分为两类:用户级线程(User-Level Thread)内核线线程(Kernel-Level Thread)线程的生命周期并发在现代多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升。即使是单核处理器也支持多线程执行代码,C原创 2021-01-12 21:59:58 · 87 阅读 · 0 评论 -
Netty设计模式与源码分析(二)
注册 Channel 的 register 操作经过前面的铺垫,我们已经具备一定的基础了,我们开始来把前面学到的内容揉在一起。这节,我们会介绍 register 操作,这一步其实是非常关键的,对于我们源码分析非常重要。selector如何注册到serverSocket上的继续跟踪代码bind//绑定一个端口并且同步, 生成了一个ChannelFuture异步对象,通过isDone()等方法可以判断异步=事件的执行情况//启动服务器(并绑定端口),bind是异步操作,sync方法是等待异步操作执行原创 2020-12-12 20:55:59 · 162 阅读 · 0 评论