并发编程读书笔记20190429

第六章

1. ConcurrentHashMap是线程安全且高效的HashMap,实现原理是通过将数据通过hash算法较均匀地存入数组链表中,每个数组链表维护了一个读写锁。通过锁分段技术,减少锁的竞争。其中有很多技术细节

2. 线程安全的队列有两种方式:使用阻塞算法,和使用非阻塞算法。使用阻塞算法的队列可以用一个锁或两个锁实现。非阻塞使用循环CAS方式实现。

3. ConcurrentLinkedQueue是非阻塞线程安全队列,由head节点和tail节点组成,每个节点(Node)由节点元素(item)和下一节点(next)组成。入队列就是将新节点放入队尾,同时移动tail节点(为了更高效,tail节点未必是队尾节点,减少volatile数据(tail)的写,提高性能)。出队列就是找到首节点,并CAS更新head节点(未必每次都更新,减少volatile数据(head)的写,提高性能)

阻塞队列是指入队队列已满和出队队列为空会进行阻塞,一般通过Lock.Condition的await和signl方式实现,类似消费者和生产者模型

4. jdk还提供了很多类型的队列,有界无界,双端队列,无存储队列等,可根据业务情况灵活使用

5. Fork/Join框架,是将任务进行分解,提高运行效率。使用工作窃取算法(一般可用双端队列实现)。ForkJoinTask与一般任务区别是需要实现compute方法,在这个方法里面判断如果任务已经足够小则进行计算,否则进行分解任务并等待完成后合并结果返回

你可能感兴趣的:(并发编程读书笔记20190429)