java并发编程
文章平均质量分 81
Vain-Glory
小小程序猿
展开
-
java并发编程面临的问题
并发编程的目的是为了让程序运行的更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。 java并发编程面临的问题: 一、上下文切换问题:任务从保存到再加载的过程就是一次上下文切换 (1)使用Lmbench3可以测量上下文切换的时长。 (2)使用vmstat可以测量上下文切换的次数。 减少上下文切换的方法: 1、无锁并发编程。 多线程竞争锁时, 会引起上下文切换, 所以多线程处理原创 2017-04-20 22:58:53 · 462 阅读 · 0 评论 -
java中的阻塞队列
一、阻塞队列(BlockingQueue) 是一个支持两个附加操作的队列。 这两个附加的操作支持阻塞的插入和移除方法。 1、支持阻塞的插入方法: 意思是当队列满时, 队列会阻塞插入元素的线程, 直到队列不满。 2、支持阻塞的移除方法: 意思是在队列为空时, 获取元素的线程会等待队列变为非空。 阻塞队列常用于生产者和消费者的场景, 生产者是向队列里添加元素的线程, 消费者是从队列里取元素的原创 2017-05-09 23:41:03 · 261 阅读 · 0 评论 -
多线程并发容器
最近学习java并发编程,少不了对java并发容器的学习,今天抽时间总结一下,有不正确之处还望互相学习: 一、ConcurrentHashMap 与hashMap和hashTable一样,ConcurrentHashMap提供了高并发的线程安全的Map实现,不但实现了的Map的功能,并且实现了接口ConcurrentMap所定义的原子操作。ConcurrentHashMap也是一个基于散列的M原创 2017-05-07 15:26:54 · 697 阅读 · 0 评论 -
ConcurrentHashMap详解
ConcurrentHashMap是线程安全且高效的HashMap。 一、为什么要使用ConcurrentHashMap 在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下, 基于以上两个原因, 便有了ConcurrentHashMap。 1、 HashMap 在多线程环境下, 使用HashMap进行put操作会引起死循环, 导致CPU利用率原创 2017-05-08 11:57:46 · 308 阅读 · 0 评论 -
BlockingQueue
JDK 1.7提供了7个阻塞队列: · ArrayBlockingQueue: 一个由数组结构组成的有界阻塞队列。 · LinkedBlockingQueue: 一个由链表结构组成的有界阻塞队列。 · PriorityBlockingQueue: 一个支持优先级排序的无界阻塞队列。 · DelayQueue: 一个使用优先级队列实现的无界阻塞队列。 · SynchronousQueue:原创 2017-05-10 09:42:21 · 301 阅读 · 0 评论 -
Fork/Join框架
Fork/Join框架是Java 1.7提供的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务, 最终汇总每个小任务结果后得到大任务结果的框架。Fork就是把一个大任务切分为若干子任务并行的执行, Join就是合并这些子任务的执行结果, 最后得到这个大任务的结果。Fork/Join框架使用工作窃取算法实现。 一、工作窃取算法 工作窃取(work-stealing) 算法是指某个线原创 2017-05-10 21:25:21 · 267 阅读 · 0 评论 -
ConcurrentLinkedQueue详解
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列, 它采用先进先出的规则对节点进行排序, 当我们添加一个元素的时候, 它会添加到队列的尾部; 当我们获取一个元素时, 它会返回队列头部的元素。 它采用了“wait-free”算法(即CAS算法) 来实现, 该算法在Michael&Scott算法上进行了一些修改。原创 2017-05-08 20:55:33 · 899 阅读 · 0 评论