求阙厅

春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是人间好时节。

并发编程 系列 任务

开启 并发编程 新篇章

Runnable Callable Future FutureTask Callable Callable 接口和 Runnable 接口相似,都可以被另外一个线程执行,Runnable不会返回数据也不能抛出异常。 Java 1.5之后提供了Callable和Future接口,通过它们就可以在任务执行完毕之后得到任务的执行结果 实例...

并发编程 系列 Synchronized

开启 并发编程 新篇章

Synchronized 用法 在 Java 中,最简单粗暴的同步手段就是 synchronized 关键字,其同步的三种用法: 同步实例方法,锁是当前实例对象 同步类方法,锁是当前类对象 同步代码块,锁是括号里面的对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 pub...

并发编程 系列 AQS

开启 并发编程 新篇章

ReentrantLock 意思为可重入锁,指的是一个线程能够对一个临界资源重复加锁。为了帮助大家更好地理解ReentrantLock的特性,我们先将ReentrantLock跟常用的Synchronized进行比较,其特性如下(蓝色部分为本篇文章主要剖析的点): 使用示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2...

Java 基础 LinkedHashMap

深究Java基础

TreeMap 实现了 SortedMap 接口,TreeMap 有能力对插入的记录根据key排序,默认按照升序排序,也可以自定义比较强,在使用TreeMap的时候,key应当实现Comparable。

Java 基础 LinkedHashMap

深究Java基础

LinkedHashMap 属于HashMap的子类,与HashMap的区别在于LinkedHashMap保存了记录插入的顺序。

Java 基础 HashTable

深究Java基础

HashTable 类是线程安全的,它使用 synchronized 来做线程安全,全局只有一把锁,在线程竞争比较激烈的情况下hashtable的效率是比较低下的

Java 基础 HashMap

深究Java基础

在JDK 1.7 中,当并发执行扩容操作时会造成环形链和数据丢失的情况。 在JDK 1.8 中,在并发执行put操作时会发生数据覆盖的情况。 比如有两个线程A和B,首先 A 希望插入一个 key-value 对到HashMap中,首先计算记录所要落到的 hash桶的索引坐标,然后获取到该桶里面的链表头结点,此时线程A的时间片用完了,而此时线程B被...

Java 基础 HashMap

深究Java基础

ConcurrentHashMap没有对整个hash表进行锁定,而是采用了分离锁(segment)的方式进行局部锁定。具体体现在,它在代码中维护着一个segment数组。 ConcurrentHashMap 使用了分段锁技术来提高了并发度,不在同一段的数据互相不影响,多个线程对多个不同的段的操作是不会相互影响的。每个段使用一把锁。

JVM 系列 G1 垃圾收集器

开启JVM探索新篇章

G1(Garbage-First)是一款面向服务器的垃圾收集器,支持新生代和老年代空间的垃圾收集,主要针对配备多核处理器及大容量内存的机器,G1最主要的设计目标是: 实现可预期及可配置的STW停顿时间。 G1 最大的特点是引入分区的思路,弱化了分代的概念。从分代的角度看,G1 依然属于分代垃圾回收器,它会区分年轻代和老年代,依然有 eden 区和 survivor 区。从堆的结构看,它并不...

网络 系列 长链接

开启 网络 探索新篇章

长连接是指网络传输层使用 TCP 协议经过三次握手建立的连接。 优势 减少连接建立过程中的耗时。数据交互(push模式)实现的前提是网络长连接,有了长连接,连接两端很方便的互相 push 数据以进行交互。 心跳 检测一个系统是否存活或者网络链路是否通畅的一种方式,其一般做法是定时向被检测系统发送心跳包,被检测系统收到心跳包进行回复,收到回复说明对方存活。心跳能够给长连接提供保活功...