今天学习CopyOnWriteArrayList。CopyOnWriteArrayList可以看做是线程安全的ArrayList,所有的写操作都是通过对底层数组进行一次新的复制实现的,这种思想称为“写时复制”,CopyO…
分类:java并发
Java并发编程札记-(五)JUC容器-05ArrayBlockingQueue与LinkedBlockingQueue
今天来学习ArrayBlockingQueue与LinkedBlockingQueue。 ArrayBlockingQueue是一个基于数组的有界阻塞队列。“有界”表示数组容量是固定的。这是一个典型的“有界缓存区”,固定…
Java并发编程札记-(五)JUC容器-04ConcurrentSkipListMap
ConcurrentSkipListMap是线程安全的有序的哈希表。与同是有序的哈希表TreeMap相比,ConcurrentSkipListMap是线程安全的,TreeMap则不是,且ConcurrentSkipLis…
Java并发编程札记-(五)JUC容器-06LinkedBlockingDeque
LinkedBlockingDeque是一个基于链表的、可指定大小的阻塞双端队列。“双端队列”意味着可以操作队列的头尾两端,所以LinkedBlockingDeque既支持FIFO,也支持FILO。 可选的容量范围构造方…
Java并发编程札记-(五)JUC容器-07ConcurrentLinkedQueue
ConcurrentLinkedQueue是一个基于链表的、无界的、线程安全的队列。此队列按照FIFO原则对元素进行排序。此队列不允许使用null元素,采用了有效的“无等待(wait-free)”算法(CAS算法)。 与…
Java并发编程札记-(六)JUC线程池-01概述
前面的例子中总是需要线程时就创建,不需要就销毁它。但频繁创建和销毁线程是很耗资源的,在并发量较高的情况下频繁创建和销毁线程会降低系统的效率。线程池可以通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 参考JDK1.…
聊聊并发(八)——Fork/Join框架介绍
本文首发于InfoQ 1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通…
Java并发编程札记-(六)JUC线程池-02ThreadPoolExecutor实现原理
本文通过学习ThreadPoolExecutor源码来学习线程池的实现原理。 简介 为什么要使用线程池 许多服务器都面临着处理大量客户端远程请求的压力,如果每收到一个请求,就创建一个线程来处理,表面看是没有问题的,但实际…
Java线程池架构2-多线程调度器(ScheduledThreadPoolExecutor)
在前面介绍了java的多线程的基本原理信息:《Java线程池架构原理和源码解析(ThreadPoolExecutor)》,本文对这个java本身的线程池的调度器做一个简单扩展,如果还没读过上一篇文章,建议读一下,因为这是…
Java并发编程札记-(六)JUC线程池-05ExecutorCompletionService
CompletionService接口是将生产新的异步任务与使用已完成任务的结果分离开来的服务。生产者利用submit()提交要执行的任务。使用者利用take()获取并移除已完成的任务的返回值,并按照完成这些任务的顺序处…
Java并发编程札记-(七)JUC工具类-01概述
今天学习JUC中的工具类。 CountDownLatch CountDownLatch是一个通用同步器,用于同步一个或多个任务。在完成一组正在其他线程中执行的任务之前,它允许一个或多个线程一直等待。 CyclicBarr…
Java并发编程札记-总结
一基础 01基本概念 并发 什么是并发 并发的优点 多线程 线程 并发与并行 线程和进程 02创建线程 创建线程的方式 Thread和Runnable该如何选择 run方法与start方法的区别 03线程的生命周期 线程…