CompletionService异步非阻塞获取并行任务执行结果
摘要:第1部分 问题引入 《Java并发编程实践》一书6.3.5节CompletionService:Executor和BlockingQueue,有这样一段话: "如果向Executor提交了一组计算任务,并且希望在计算完成后获得结果,那么可以保留与每个任务关联的Future,然后反复使用get方法,同
阅读全文
posted @
2019-08-15 01:33
kosamino
阅读(1014)
推荐(0) 编辑
java.io.Serializable浅析
摘要:Java API中java.io.Serializable接口源码: 类通过实现java.io.Serializable接口可以启用其序列化功能。未实现次接口的类无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。 Java
阅读全文
posted @
2019-08-14 23:52
kosamino
阅读(435)
推荐(0) 编辑
ConcurrentHashMap底层实现原理(JDK1.8)源码分析
摘要:ConcurrentHashMap数据结构 ConcurrentHashMap相比HashMap而言,是多线程安全的,其底层数据与HashMap的数据结构相同,数据结构如下: 说明:ConcurrentHashMap的数据结构(数组+链表+红黑树),桶中的结构可能是链表,也可能是红黑树,红黑树是为了
阅读全文
posted @
2019-08-10 03:03
kosamino
阅读(715)
推荐(0) 编辑
HashMap和ConcurrentHashMap实现原理及源码分析
摘要:HashMap实现原理及源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对
阅读全文
posted @
2019-08-10 02:39
kosamino
阅读(2497)
推荐(2) 编辑
CopyOnWriteArrayList实现原理及源码分析
摘要:CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器",Java并发包中类似的容器还有CopyOnWriteSet。本文会对C
阅读全文
posted @
2019-08-09 09:28
kosamino
阅读(395)
推荐(0) 编辑
HashMap闭环(死循环)的详细原因(转)
摘要:为何出现死循环简要说明 HashMap是非线程安全的,在并发场景中如果不保持足够的同步,就有可能在执行HashMap.get时进入死循环,将CPU的消耗到100%。 HashMap采用链表解决Hash冲突。因为是链表结构,那么就很容易形成闭合的链路,这样在循环的时候只要有线程对这个HashMap进行
阅读全文
posted @
2019-08-08 09:16
kosamino
阅读(7708)
推荐(2) 编辑
JAVA栅栏和闭锁的区别
摘要:闭锁:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。即,一组线程等待某一事件发生,事件没有发生前,所有线程将阻塞等待;而事件发生后,所有线程将开始执行;闭锁最初处于封闭状态,当事件发生后闭锁将被打开,一旦打开,闭锁将永远处于打开状态。 闭锁CountDownL
阅读全文
posted @
2019-08-08 01:46
kosamino
阅读(3591)
推荐(0) 编辑
项目中常用的19条MySQL优化
摘要:一、EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划。 下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 二、SQL语句中IN包含的值不应过多 MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果
阅读全文
posted @
2019-08-06 09:28
kosamino
阅读(272)
推荐(0) 编辑
Vector、HashTable线程不安全示例
摘要:下面这样写法是Vector线程不安全的写法: 尽管Vector get()、remove()、get() 方法是I同步的 但运行上面程序会出现以下错误: HashTable线程不安全写法: 会出现很多null值,但不错,因为没有那个key ,但不会报错 在多线程环境中,如果不在方法调用端做额外的同步
阅读全文
posted @
2019-08-06 00:07
kosamino
阅读(353)
推荐(0) 编辑
红黑树原理图示详解(转)
摘要:一.为什么要有红黑树这种数据结构? 我们知道ALV树是一种严格按照定义来实现的平衡二叉查找树,所以它查找的效率非常稳定,为O(log n),由于其严格按照左右子树高度差不大于1的规则,插入和删除操作中需要大量且复杂的操作来保持ALV树的平衡(左旋和右旋),因此ALV树适用于大量查询,少量插入和删除的
阅读全文
posted @
2019-08-05 03:04
kosamino
阅读(2007)
推荐(0) 编辑
B树与B+详解
摘要:一、前言 动态查找树主要包括:二叉查找树,平衡二叉树,红黑树,B树,B-树,查找的时间复杂度就为O(log2N),通过对数就可以发现降低树的深度就会提高查找效率。在大数据存储过程,大量的数据会存储到外存磁盘,外存磁盘中读取与写入某数据的时候,首先定位到磁盘中的某一块,这就有个问题:如何才能有效的查找
阅读全文
posted @
2019-08-04 18:38
kosamino
阅读(556)
推荐(0) 编辑