- 博客(11)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 Java锁机制之CAS(二)
导语 上一篇提到了在多核CPU环境下怎么实现CAS的原子性操作。本节将列举CAS在Java中的具体应用。 CAS实现锁的原理 CAS的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。 若不相等,则不做任何操作。 基于这个理念,试想,在并发场景中,如果我们在做CAS操作的时候不成功,那么可以一直循环执行,直到最终成功返回为止。 这样没有加锁执行,线程不会阻塞影响性能,只会耗费更多的CPU资源。 AtomicLong为列 AtomicLong.java // 获取Un.
2020-08-15 22:23:15 127
原创 Java锁机制之CAS(一)
导语 CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数:内存位置、预期数值和新值。CAS的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。 简介 在 Java 中,Java 并没有直接实现 CAS,CAS 相关的实现是通过 C++ 内联汇编的形式实现的。Java 代码需通过 JNI 才能调用。接下来将会再介绍一点其他的背景知识。有这些背景知识,才能更好的理解后续的内容。
2020-08-15 22:22:10 278
原创 LinkedBlockingQueue 深入分析
导语 LinkedBlockingQueue是一个单向链表实现的阻塞队列,先进先出的顺序。支持多线程并发操作。相比于数组实现的ArrayBlockingQueue的有界,LinkedBlockingQueue可认为是无界队列。多用于任务队列。 分析要点 是否线程安全? 数据结构是怎样的? 怎么实现阻塞和非阻塞插入和获取元素? 怎么实现插入和获取元素平衡的? 应用与哪些场景? 深入剖析 成员变量 // 队列的总容量 private final int capacity; // 元素的总个数 pri.
2020-08-15 22:19:43 398
原创 ArrayBlockingQueue 深入分析
导语 ArrayBlockingQueue 是一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。 分析要点 是否线程安全? 数据结构是怎样的? 怎么实现阻塞和非阻塞插入和获取元素? 怎么实现插入和获取元素平衡的? 应用与哪些场景? 深入剖析 成员变量 // 元素存放的对象,可以看出其数据结构仍然为数组 final Object[] items; // 获取下一个元素的数组下标 int takeIndex.
2020-08-15 22:18:25 389
原创 Thread-线程中断机制(interrupt)
导语 在线程的中断机制里面有三个比较相似的方法,分别是interrupt()、isInterrupted()、interrupted(),之前一直没有了解的很透彻,记录一下。 Java的中断是一种协作机制。调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己。每个线程都有一个boolean的中断状态(这个状态不在Thread的属性上),interrupt方法仅仅只是将该状态置为true。 方法对比 方法 描述 interrupt(.
2020-08-15 22:17:00 563
原创 Markdown语法详解
Markdown 致力于使阅读和创作文档变得容易,虽然网上的教程有很多,始终还是觉得自己总结一遍印象更加深刻。 块级元素 段落和换行 标题 块引用 列表 代码块 水平线 内联元素 链接 强调 代码 图片 页内跳转 段落和换行 段落就是在连续行上的文本后追加一个或多个空行,实现划分段落 换行就是在行末追加3个以上的空格,实现换行 标题 # 一级标题 ## 二级标题 ### 三级标题 实现效果: 一级标题 二级标题 三级标题 块引用 在引用的段落前加上字符>,即可实现段落
2020-08-15 22:11:58 96
原创 Vim基本命令
Vim的几种模式 正常模式:可以使用快捷键命令,或按:输入命令行。 插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可 视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。 替换模式:正常模式下,按R进入。 启动Vim 命令 描述 vim -c cmd file 在打开文件前,先执行指定的命令; vim -r file 恢复上次异常退出的文件; vim -R
2020-08-15 22:10:58 435
转载 Awk命令详解
awk 文本和数据进行处理的编程语言 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。 awk命令格式和选项 语法形式 awk [options] ‘script’ va
2020-08-15 22:08:21 3240
原创 LinkedList深入分析
导语 LinkedList集成AbstractSequentialList,实现了List,Deque,Cloneable,Serializable接口。AbstractSequentialList提供了骨干实现。Deque一个线性 collection,支持在两端插入和移除元素,定义了双端队列的操作。 分析要点 是否线程安全? 数据结构是怎样的? 怎么实现扩容? 怎么实现插入和获取元素? 应用与哪些场景? 深入剖析 构造函数 ... // 元素个数 transient int size = 0.
2020-08-09 22:53:14 154
原创 ArrayList深入分析
导语 ArrayList是我们在编程中经常用到的类,它实现了接口List,List接口继承了Collection接口。ArrayList使用非常广泛,在集合框架中举重轻重。 分析要点 是否线程安全? 数据结构是怎样的? 怎么实现扩容? 怎么实现插入和获取元素? 应用与哪些场景? 深入剖析 构造函数 ... // 成员变量 transient Object[] elementData; ... public ArrayList(int initialCapacity) { if (initia.
2020-08-04 23:48:58 138
原创 Java基础篇之ThreadPoolExecutor
导语 使用线程池的好处是能够减少在创建和销毁线程上所花费的时间以及系统资源的开销,提升系统整体性能。那么线程池是怎么实现这一目标的呢? 线程池的创建 public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threa.
2020-08-02 17:05:49 258
Unix/Linux和Windows图形应用程序
2016-11-24
redis中内嵌lua版本的问题
2019-11-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人