摘要: ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Synchronized,ReentrantLock增加了一些高级的扩展功能,比如它可以实现公平锁,同时也可 阅读全文
posted @ 2017-07-29 23:59 dreamcatcher-cx 阅读(8728) 评论(3) 推荐(6) 编辑
摘要: 目录 1 基本实现原理 1.1 如何使用 1.2 设计思想 2 自定义同步器 2.1 同步器代码实现 2.2 同步器代码测试 3 源码分析 3.1 Node结点 3.2 独占式 3.3 共享式 4 总结 Java并发包(JUC)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,譬如Reent 阅读全文
posted @ 2017-07-24 13:46 dreamcatcher-cx 阅读(50681) 评论(12) 推荐(18) 编辑
摘要: Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式。先来我们来看下相关定义: wait() :调用该方法的线程进入WATTING状态,只有等待另外线程的通知或中断才会返回,调用 阅读全文
posted @ 2017-06-18 09:20 dreamcatcher-cx 阅读(3468) 评论(3) 推荐(2) 编辑
摘要: CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器",Java并发包中类似的容器还有CopyOnWriteSet。本文会对C 阅读全文
posted @ 2017-05-21 15:11 dreamcatcher-cx 阅读(17201) 评论(5) 推荐(16) 编辑
摘要: ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentH 阅读全文
posted @ 2017-05-14 18:24 dreamcatcher-cx 阅读(117470) 评论(15) 推荐(53) 编辑
摘要: 在谈谈java中的volatile一文中,我们提到过并发包中的原子类可以解决类似num++这样的复合类操作的原子性问题,相比锁机制,使用原子类更精巧轻量,性能开销更小,本章就一起来分析下原子类的实现机理。 悲观的解决方案(阻塞同步) 我们知道,num++看似简单的一个操作,实际上是由1.读取 2.加 阅读全文
posted @ 2017-04-30 23:57 dreamcatcher-cx 阅读(18874) 评论(2) 推荐(4) 编辑
摘要: 内存可见性 留意复合类操作 解决num++操作的原子性问题 禁止指令重排序 总结 内存可见性 volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用s 阅读全文
posted @ 2017-03-18 20:02 dreamcatcher-cx 阅读(55002) 评论(15) 推荐(32) 编辑
摘要: ThreadLocal介绍&跳出误区 看看源码 线程独享变量? ThreadLocal介绍&跳出误区 ThreadLocal一般称为线程本地变量,它是一种特殊的线程绑定机制,将变量与线程绑定在一起,为每一个线程维护一个独立的变量副本。通过ThreadLocal可以将对象的可见范围限制在同一个线程内。 阅读全文
posted @ 2016-12-14 00:02 dreamcatcher-cx 阅读(28126) 评论(6) 推荐(8) 编辑
摘要: 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行 阅读全文
posted @ 2016-11-16 00:27 dreamcatcher-cx 阅读(351260) 评论(72) 推荐(179) 编辑
摘要: 对于数据库来讲,安全性的重要程度不言而喻,今天我们就来聊一聊Oracle的权限体系。 1.账户管理 在此之前,先解释下一个容易混淆的概念:模式。所谓模式,指的是用户账户所拥有的一组对象(比如表,索引,视图,同义词之类的)。 所以严格意义上来讲它跟账户是不同的概念,切莫混淆。 创建一个账户 上面列举了 阅读全文
posted @ 2016-10-15 16:29 dreamcatcher-cx 阅读(5353) 评论(1) 推荐(1) 编辑
摘要: 对于一门技术的学习,尤其是像Oracle database这种知识体系极其庞杂的技术来讲,从宏观上了解其体系结构是至关重要的。同时,个人认为,未必是专业DBA人员才需要了解其体系结构(固然对于数据库专业人员来讲,这些都是必备知识了),一般的技术人员如果对其有较深入的了解,也是大有益处的,毕竟技术思想 阅读全文
posted @ 2016-09-26 00:17 dreamcatcher-cx 阅读(55904) 评论(9) 推荐(20) 编辑
摘要: 概述: 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于Oracle一些高级的 阅读全文
posted @ 2016-09-11 00:48 dreamcatcher-cx 阅读(50588) 评论(0) 推荐(5) 编辑
摘要: 基础概念 二叉树(binary tree)是一棵树,其中每个结点都不能有多于两个儿子。 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; (3)左、右 阅读全文
posted @ 2017-02-13 20:45 dreamcatcher-cx 阅读(6624) 评论(1) 推荐(1) 编辑
摘要: 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 基本步骤 三数取中 在快排的 阅读全文
posted @ 2017-01-08 18:12 dreamcatcher-cx 阅读(81054) 评论(12) 推荐(20) 编辑
摘要: 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 分而治之 可以看到 阅读全文
posted @ 2016-12-18 20:35 dreamcatcher-cx 阅读(562680) 评论(61) 推荐(199) 编辑