![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 87
caoyu019
这个作者很懒,什么都没留下…
展开
-
Java多线程编程实战指南 核心篇 总结-1
1. 多线程的三种实现及java多线程的实现详解见:https://blog.csdn.net/nalanmingdian/article/details/77748326java 使用用户线程加轻量级进程混合实现,且采用1对1模型,其中兼顾实现复杂度及跨平台性。由于仅使用用户线程,则线程相关的调度、切换即CPU映射等复杂操作都需要考虑所以在java 1.2 后就不在使用了,而...原创 2018-10-25 16:55:38 · 391 阅读 · 0 评论 -
ThreadLocal 及 FastThreadLocal 分析
ThreadLocal 分析:ThreadLocal 的功能:通过ThreadLocal变量,构建一个Thread 级别变量,在同一个线程中共享该变量,不同线程中隔离该变量,是一种解决线程安全的方式。ThreadLocal 是什么:ThreadLocal 是一个Thread 级别变量的key,通过ThreadLocal可以直接获取这个Thread 级别的变量。ThreadLoc...原创 2019-10-11 13:33:17 · 338 阅读 · 0 评论 -
FutureTask 分析
FutureTask 功能:由于FutureTask 同时实现Future和Runable接口,所有FutureTask代表一种支持异步计算的任务。这里有两重概念,一个是获取异步计算结果,二是可执行的任务。FutureTask 原理分析:为了实现FutureTask 的两个功能,逐一进行分析。1.获取异步计算结果:通过将无状态的结果,引入生命周期概念,进行状态化,来完成异...原创 2019-09-11 14:52:41 · 193 阅读 · 0 评论 -
apache commons-io类库中FileCleaningTracker 分析
源码分析:https://blog.csdn.net/jasontome/article/details/6780989设计思路:1. 通过Daemon线程删除无效的临时文件。2. 通过ReferenceQueue引用队列获取无效的文件对象,引用队列标识文件对象是否已经回收无效。虚引用使用:首先参考PhantomReference的回收机制https://www....原创 2019-08-28 13:24:43 · 947 阅读 · 0 评论 -
Condition 分析与总结
在没有 Lock 之前,我们使用synchronized来控制同步,配合 Object 的#wait()、#notify()等一系列方法可以实现等待 / 通知模式。而Object 的#wait()、#notify()的缺点主要在于一个锁只支持一个等待队列,如果一个锁上的等待条件又多个,一个条件满足后,会唤醒等待队列中所有的线程,而等待队列中有些线程是在等待其他的条件,也就是“过早唤醒...转载 2019-07-27 15:29:36 · 140 阅读 · 0 评论 -
ReentrantReadWriteLock 分析
ReentrantReadWriteLock实现 ReadWriteLock 接口,可重入的读写锁实现类。在它内部,维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。读取锁可以由多个 Reader 线程同时保持。也就说,写锁是独占的,读锁是共享的。ReentrantReadWriteLock 代码结构如下:public class ReentrantReadWriteLock ...原创 2019-07-26 14:42:29 · 99 阅读 · 0 评论 -
DelayQueue 基本原理深入分析
DelayQueue是一个无界阻塞队列,队列中元素只有在延迟期满时才能从中提取。在每次往优先级队列中添加元素时以元素的过期时间作为排序条件,最先过期的元素放在优先级最高。DelayQueue实现的关键主要有如下几个:可重入锁ReentrantLock 用于阻塞和通知的Condition对象 根据Delay时间排序的优先级队列:PriorityQueue(完全二叉堆) 用于优化阻塞通知...原创 2019-07-30 21:18:19 · 663 阅读 · 0 评论 -
深入理解Java虚拟机:JVM高级特性与最佳实践 - 总结2
JVM 垃圾回收三部曲:哪些对象需要回收 何时回收这些对象 怎样回收回收这些对象哪些对象需要回收:判断一个对象是否可回收引用计数: 定义:给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1 问题:两个对象会出现循环引用问题,此时引用计数器永远不为 0,导致 GC 收集器无法回收。 可达性(java使用此方法): 定义:通过 ...原创 2018-11-08 23:36:14 · 195 阅读 · 0 评论 -
Java多线程编程实战指南 核心篇 总结-4
线程间协作等待与通知:wait/notifywait方法:一个线程因其执行目标动作所需的保护条件未满足而被暂停的过程。wait方法继承自Object类(方法修饰符为fianl native,这也解释了为什么condition类中不能重写wait等方法) 阻塞:wait方法的调用都会使当前线程阻塞。该线程将会被放置到对该Object的请求等待队列中,然后让出当前对Object所拥有的对...原创 2018-11-09 18:09:03 · 397 阅读 · 0 评论 -
Java多线程编程实战指南 核心篇 总结-3
线程同步机制从广义上说,Java平台提供的线程同步机制包括锁、volatile关键字、final关键字和一些相关的API,如Object.wait( )/.notify( )等锁定义:锁具有排他性,即一个锁一次只能被一个线程持有。因此,这种锁被称为排他锁或者互斥锁。还有另外一种锁--读写锁,它可以被看作排他锁的一种相对改进。作用:锁能够保护共享数据以实现线程安全,其作用包括保障原子...原创 2018-10-29 13:16:17 · 135 阅读 · 0 评论 -
Java多线程编程实战指南 核心篇 总结-2
1. 线程安全性线程安全性体现在三个方面:1.原子性 2.可见性 3.有序性原子性:原子操作是多线程环境下的一个概念,它是针对访问共享变量的操作而言的。java中有两种方式实现原子性。一种是使用锁。另一种是利用处理器专门提供的CAS(Compare-and-Swap)指令。它们的差别在于:锁通常是在软件这一层次实现的,而CAS是直接在硬件这一层次实现的,它可以被看作“硬件锁”...原创 2018-10-25 18:03:30 · 144 阅读 · 0 评论 -
CPU缓存一致性协议MESI 的理解,及CAS基于MESI的应用
CPU缓存一致性协议MESI 的理解关于CPU缓存一致性协议MESI,已经有很多文章详细的介绍,如下https://www.cnblogs.com/yanlong300/p/8986041.html以下是我个人对这个协议的理解。首先,CPU与缓存及内存及总线的关系如下图所示:所以CPU获取数据是直接从缓存中获取,不是从内存中获取。由于现在CPU架构支持多核,所以多核CP...原创 2019-09-19 15:57:12 · 618 阅读 · 0 评论