摘要: 无锁编程真的是不涉及锁么?无锁编程实现的本质是什么?需要操作系统或者编译器的支持么?本文尝试解答这些问题。 1 锁引发的问题 使用锁时要特别防止出现死锁或活锁。死锁的情况很简单,就是申请者在申请过程中由于顺序原因(多个锁没有按固定顺序申请)进入堵塞状态了,指定顺序即可规避。我们只看一个活锁的例子: 阅读全文
posted @ 2018-09-04 20:34 kaleidoscopic 阅读(1291) 评论(0) 推荐(0) 编辑
摘要: Lock-free programming is a challenge, not just because of the complexity of the task itself, but because of how difficult it can be to penetrate the s 阅读全文
posted @ 2018-09-04 20:21 kaleidoscopic 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 一、拉链法 上篇博文我们举的例子,HashMap,HashSet其实都是采用的拉链法来解决哈希冲突的,就是在每个位桶实现的时候,我们采用链表(jdk1.8之后采用链表+红黑树)的数据结构来去存取发生哈希冲突的输入域的关键字(也就是被哈希函数映射到同一个位桶上的关键字)。首先来看使用拉链法解决哈希冲突 阅读全文
posted @ 2018-09-04 20:05 kaleidoscopic 阅读(20353) 评论(0) 推荐(1) 编辑
摘要: 多线程编程中,当代码需要同步时我们会用到锁。Java为我们提供了内置锁(synchronized)和显式锁(ReentrantLock)两种同步方式。显式锁是JDK1.5引入的,这两种锁有什么异同呢?是仅仅增加了一种选择还是另有其因?本文为您一探究竟。 JDK1.5中,synchronized是性能 阅读全文
posted @ 2018-09-04 16:32 kaleidoscopic 阅读(1851) 评论(1) 推荐(0) 编辑