Java多线程
不清不慎
热爱编程,热爱生活。
展开
-
不一样的排序算法【并行排序】
对于排序算法相信大家都不陌生,大部分排序的程序都是串行的排序算法,比如冒泡排序,插入排序,选择排序,堆排序等等,但是随着计算机的发展,现在的计算机都是多核的处理器,串行排序无法高效的利用CPU,为了更加有效的利用CPU,我们在这里介绍一下在并行世界中的排序算法。一、奇偶交换排序在介绍并行排序之前,我们有必要介绍一下奇偶排序,为了将串行排序算法改为并行排序,使用奇偶排序可以更加方便的修改...原创 2018-03-15 20:24:24 · 6946 阅读 · 0 评论 -
生产者-消费者模式案例以及数据共享队列【BlockingQueue】源码分析
一、生产者与消费者模式生产者与消费者模式时一个经典的多线程设计模式,它为多线程之间的协作提供了良好的解决方案,在生产者-消费者模式中,通常有两种模式线程,一类是消费者线程,另一类是生产者线程,生产者负责具体处理生产者提交的任务,消费者线程负责具体处理生产者提交的任务。生产者与消费者之间则通过共享内存缓冲区进行通信。生产者-消费者模式主要组件在于共享内存缓冲区,它作为生产者和消费者的通信桥梁...原创 2018-03-04 21:14:47 · 814 阅读 · 0 评论 -
【JAVA并发包源码分析】循环栅栏:CyclicBarrier
一、认识CyclicBarrier对于CyclicBarrier大多数人感到陌生,其实CyclicBarrier是一种多线程并发控制使用工具,和CountDownLatch非常类似,实现线程之间的计数等待,也就是说一个线程或者多个线程等待其他线程完成任务,不过比CountDowwnLatch复杂。CyclicBarrier是循环栅栏的意思,所谓栅栏就是障碍物,阻止其他人进入,在多线程中,使...原创 2018-04-07 22:39:18 · 626 阅读 · 0 评论 -
JDK并发包源码解析之深度剖析高效读写队列ConcurrentLinkedQueue
在Java的并发包中,存在着许多高效的并发工具类,它优于synchronized关键字,在JDK中提供了一个ConcurrentLinkedQueue工具类实现了高效的并发读写工具类,该工具类具有很高效的性能,因此,本片文章笔者将通过解读ConcurrentLinkedQueue源码的方式探究该数据结构的内部构造。一、无锁(CAS算法)在介绍这个工具类之前,先来讲讲无锁的概念以及其算法...原创 2018-04-23 22:27:18 · 637 阅读 · 0 评论 -
JAVA高并发之锁的优化及源码解读
在现代系统多核的时代,使用多线程明显了地提高了系统的性能,但是在高并发的环境中,激烈的锁竞争对系统的性能带来的严重的影响,因为对于多线程来说,它不仅要维持每一个线程本身的元数据,还要负责线程之间的切换,不断的挂起,唤醒,浪费了大量的时间,因此,有必要探讨一下如何将多线程中锁的优化做到极致,给系统带来更大的好处。对于“锁”性能的优化 本文将围绕“锁”优化来讲解,其中会涉及到部分JDK的源码解读...原创 2018-04-24 23:59:11 · 514 阅读 · 0 评论 -
JAVA线程池原理剖析
一般情况下,我们经常会创建大量的线程为我们完成分配的工作,但是有时候频繁的创建销毁线程也会给系统带来很大的损耗,因此,为了避免带给系统不必要的损耗和重复造轮子,我们引入了线程池的概念。本篇文章主要讲解线程的实现原理。请尊重劳动成果,转载标明原文地址:不清不慎的博客所谓线程池,就是一次性创建出多个线程,当一个任务到来的时候可以直接从线程池中获取一个线程来执行任务,不需要去创建;当任务...原创 2018-05-02 22:36:09 · 2559 阅读 · 1 评论 -
Volatile原理深度剖析
熟悉Java并发编程的程序员应该对于volatile,synchronized关键都不陌生,这两个关键字是并发编程的基础,在之前笔者看过很多关于volatile关键字的解析博客,讲述的也比较详细,但是感觉不是很全面,今天总结了一下自己之前所学的知识,想比较全面的写一篇关于volatile关键字原理的文章,分享给大家。转发请标明原文链接:Volatile实现原理对于volatil...原创 2018-06-30 21:41:32 · 934 阅读 · 0 评论 -
【基础巩固篇】Java 8中对CAS的优化
Java的并发包下存在着许多并发工具,CAS也是其中的一员,对于CAS(CompareAndSet)我们并不陌生,它基于乐观锁的机制,当前值等于期望值时设置成功,但是它也会导致一系列问题,当大量线程同时去访问时,就会导致空旋转,CPU资源消耗过多,而且执行效率也不高。同时它也会产生ABA问题,不过在java中可以使用基于时间版本号的AtomicStampedReference来解决。(本文默认读...原创 2019-05-10 23:23:32 · 1115 阅读 · 0 评论